接口调用三种方式

news2024/11/23 12:24:06

创建服务端

一个controller,一个启动类,配置端口

  • controller
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ServerController {

    @RequestMapping("/server/test1")
    public String getStr(String a){
        System.out.println("请求到server端");
        return a;
    }

}

原始httpclient请求

参考链接:httpClient

只需要一个controller测试发送请求

  • controller
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

@RestController
public class HttpController {

    @RequestMapping("/http/test1")
    public String test1(String a) throws IOException {
    	//服务端的地址
        String urlPath="http://192.168.3.32:7071/server/test1?a="+a;
        //CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
        /*
            HttpClients是一个工具类,等同上面的方法
            可关闭的httpclient客户端,相当于打开的一个浏览器
         */
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();

        //httpGet
        HttpGet httpGet=new HttpGet(urlPath);

        //可关闭的响应:DecopressingEntity
        CloseableHttpResponse response=null;
        try {
            //发送请求
            response=closeableHttpClient.execute(httpGet);
            //获取响应结果:HttpEntity不仅可以作为结果,也可以作为请求的参数实体,有很多的实现
            HttpEntity entity = response.getEntity();
            //对HttpEntity操作的工具类,转成string看下结果
            String toStringResult = EntityUtils.toString(entity, StandardCharsets.UTF_8);
            System.out.println(toStringResult);
            return toStringResult;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (closeableHttpClient!=null){
                closeableHttpClient.close();
            }
            if(response!=null){
                response.close();
            }
        }
        return "null";
    }
}

在这里插入图片描述

RestTemplate调用接口

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class RestTemplateController {

    @RequestMapping("/rest/test1")
    public String test1(String a){

        String urlPath="http://192.168.3.32:7071/server/test1?a="+a;

        // 创建 RestTemplate 实例
        RestTemplate restTemplate = new RestTemplate();


        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<String> httpEntity = new HttpEntity<String>(null, headers);
        ResponseEntity<String> forEntity = restTemplate.postForEntity(urlPath,httpEntity,String.class);
        return forEntity.getBody();
    }

}

在这里插入图片描述

feign调用接口

需要一个service接口使用注解配置服务端的相关信息,还需要在启动类使用注解@EnableFeignClients

引入pom

  • pom
    要用openfeign,而不是feign,feign早就废弃了
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  • service
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

//服务端请求接口的地址为192.168.3.32:7071/server/test1
@Service
//url为要请求接口的ip和端口,name随便
@FeignClient(url = "192.168.3.32:7071",name = "client")
public interface ClientService {

	//请求的接口名称,对应服务端的controller
    @RequestMapping("/server/test1")
    @ResponseBody
    //需要绑定参数,不然可能收到的值为null
    public String getStr(@RequestParam("a")String a);
}
  • controller
import com.wzw.service.ClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClientController {

    @Autowired
    private ClientService service;

    @RequestMapping("/client/getStr")
    public String getStr(String a){
        System.out.println(a);
        return service.getStr(a);
    }

}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp开发h5 遇到一个刻度尺的需求 实现记录

先上最终实现图 实现这个功能使用的是github上找的一个库 叫slide-ruler 地址 实现思路&#xff1a; 第一步&#xff1a;在终端npm 下载这个依赖 第二步&#xff1a;新建一个刻度尺自定义组件&#xff0c;如果不是自定义组件会不生效&#xff0c;并且这个自定义组件里面放一…

用无代码搭建数据中台,竟做到如此丝滑

文章目录 需求背景系统介绍配置说明1 菜单导航2 系统自带组件导入页面&#xff08;1&#xff09;数据集成相关组件&#xff08;2&#xff09;数据服务相关组件 3 由系统组件路径添加页面&#xff08;1&#xff09;数据资产管理&#xff08;2&#xff09;数据标准管理&#xff0…

Hutool工具包:http客户端工具(使用教程)

目录 一、Hutool介绍 二、笔者的话 三、引入依赖 四、大致步骤 五、GET请求 5.1 代码 5.2 结果展示 六、POST请求 6.1 代码一&#xff08;Form Data类型参数&#xff09; 6.2 结果展示 6.3 代码二&#xff08;Form Data类型参数 - 含上传文件&#xff09; 6.4 结果…

idea设置项目启动的JVM运行内存大小

idea设置项目启动的JVM运行内存大小 场景 在开发当中&#xff0c;idea默认服务启动要占用1G内存。其实每个项目本地开发和调试的时候&#xff0c;根本不需要1G内存&#xff0c;200M左右足以 如果在微服务体系下&#xff0c;那效果更明显&#xff0c;相同的内存可以启动更多的…

Linux学习之Redis集群部署

Redis集群部署 准备集群环境 创建集群 # 准备集群环境--配置192.168.88.51(host51) [rootlocalhost ~]# yum install -y redis [roothost51 ~]# vim /etc/redis.conf bind 192.168.88.51 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000…

Java web基础知识

Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet &#xff0c;一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做&#xff0c;Servlet 初步…

成功的海外网红营销:文化和价值观冲突的应对策略

随着全球数字化和社交媒体的崛起&#xff0c;海外网红营销已经成为企业推广产品和服务的一种重要方式。然而&#xff0c;这种全球性的营销活动也伴随着文化和价值观的多样性&#xff0c;容易导致潜在的冲突和误解。为了取得成功并避免不必要的争议&#xff0c;企业需要深入了解…

从B-21轰炸机看美空军作战战略趋势

源自&#xff1a;北京蓝德信息科技有限公司 图注&#xff1a;The B-21 Raider was unveiled to the public at a ceremony Dec. 2, 2022, in Palmdale, Calif. (U.S. Air Force photo) (一)B-21开发进展 (二)B-21性能研判 声明:公众号转载的文章及图片出于非商业性的教育和科研…

2023 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开

安全之安全(security)博客目录导读 目录 一、幻灯片地址 二、演讲视频 一、幻灯片地址&#xff1a; GitHub - cnrv/RVSC2023: RISC-V Summit China 2023 二、演讲视频&#xff1a; RISCV国际基金会的个人空间-RISCV国际基金会个人主页-哔哩哔哩视频 参考&#xff1a;CNRV …

python+django社区医院诊所医疗管理系统_6t4o8

技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vueCSSpythonScriptjQueryelementui 开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCh…

计算机专业毕业设计项目推荐05-共享汽车管理系统(SpringBoot+Js+Mysql)

共享汽车管理系统&#xff08;SpringBootJsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计…

解码知识图谱:从核心概念到技术实战

目录 1. 概述什么是知识图谱知识图谱与自然语言处理的关系 2. 发展历程语义网络本体论大数据时代的知识图谱知识图谱与深度学习的融合 3. 研究内容知识图谱的建模与表示知识抽取知识图谱的融合与对齐知识图谱的推理知识图谱的评估与验证 4. 知识图谱表示与存储RDF&#xff1a;一…

基于java SpringBoot和HTML实验室预约管理系统设计

摘要 实验室信息管理系统是利用计算机网络技术、数据存储技术、快速数据处理技术对实验室进行全方位管理的计算机软件系统。实验室信息管理系统从最初仅完成数据存储和有限的网络功能&#xff0c;发展到现在可以处理海量数据&#xff0c;具备完善的管理职能&#xff0c;并且能够…

JavaScript中的浅拷贝与深拷贝

前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念&#xff0c;它们在处理对象和数组时具有不同的作用。在编程中&#xff0c;经常需要复制数据以便进行各种操作&#xff0c;但必须注意拷贝的方式&#xff0c;以确保得到预期的结果。 浅拷贝是创建一个新对象或数组&#xf…

D*算法图文详解

前面学习了Dijkstra以及A* 算法的基本原理&#xff0c;对于这两种算法而言&#xff0c;我们都能在有解的情况下找到一条沿着起点到达终点的路径。然而&#xff0c;这两个算法本身都是基于静态地图的&#xff0c;也就是说&#xff1a;当机器人找到路径后开始沿着起点向终点运动的…

不断探索创新 促进中国信息技术发展——南京宏控科技有限公司董事长应富忠

应富忠&#xff0c;男&#xff0c;现任南京宏控科技有限公司董事长、电子系统工程高级工程师&#xff08;技术五级&#xff09;、自动化系统注册工程师&#xff0c;先后被评为“研究所级青年突击手”、“研究所级先进工作者”、“研究所级优秀共产党员”、“南京市级考级优秀”…

微服务保护-授权规则/规则持久化

授权规则 基本规则 授权规则可以对调用方的来源做控制&#xff0c;有白名单和黑名单两种方式。 白名单&#xff1a;来源&#xff08;origin&#xff09;在白名单内的调用者允许访问 黑名单&#xff1a;来源&#xff08;origin&#xff09;在黑名单内的调用者不允许访问 点…

未解之迷——晶振问题导致SWD烧录时芯片no target connected,切换内部晶振后解决了

我所讲的情况是网上总结之外的另一种情况。不是Reset 后卡时间烧录&#xff0c;也不是烧录器问题&#xff0c;引脚问题等。而是STM32CubeMX软件生成问题。 芯片&#xff1a;STM32F103C8T6 某天我做了一块板子&#xff0c;按正常流程烧录&#xff0c;第一次可以烧录&#xff0c…

让Pegasus天马座开发板吃上STM8S标准库

WeCanStudio官方仓库的示例工程,只提供基于STM8S003寄存器方式来开发Pegasus天马座开发板。在此,我将基于官方的工程示例&#xff0c;将STM8S标准库移植到工程中。 先上图&#xff0c;看运行结果: main.c文件 #include "config.h" #include "delay.h"#de…

灯具欧盟CE认证,EMC/LVD/MD等欧盟指令介绍

CE认证产品范围 ​1.灯具类产品; ​2.家用电器设备、电动工具; ​3.个人电脑及其周边设备; ​4.音视频产品; ​5.无线产品; ​6.通讯类类产品; ​7.玩具类产品; ​8.安防产品; ​9.工业机械。 CE认证所需资料 ​1.一般2-3个测试样品; ​2.电路原理图; ​3.产品说明…