springboot实现跨服务调用/springboot调用另一台机器上的服务

1、问题描述?

在实际的开发中,我们可能需要调用另一台服务器上的api服务,实现两台服务器之间的数据交互。

这个时候我们就可以使用springboot框架中提供的RestTemplate类实现。

其他如webClient或微服务中的feign等本文不做阐述。

使用起来相对简单。

2、RestTemplate使用详情。

2.1、创建springboot工程添加依赖包

RestTemplate相关依赖包在spring-boot-starter-web依赖包中。

复制代码
<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.2、创建初始化RestTemplate配置类

1、此处创建RestTemplate有两种方式,一种是通过new方式直接创建,一种是通过builer方式在创建的时候提供更加详细的配置,如超时时间等。

2、二者创建略有不同,但是使用方式相同。

【第一种创建方式】

通过new RestTemplate();方式直接创建

复制代码
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

【第二种创建方式】

通过builder方式创建,提供更加详细的创建方式

复制代码
@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        // 使用builder链式调用设置不同的属性
        return builder
                //.additionalMessageConverters(new StringHttpMessageConverter()) // 添加消息转换器
                .setConnectTimeout(Duration.ofSeconds(5)) // 设置连接超时时间
                .setReadTimeout(Duration.ofSeconds(5)) // 设置读取超时时间
                .build(); // 构建RestTemplate实例
    }
}

2.3、使用RestTemplate调用远程api

【1、返回字符串类型的参数】

restTemplate.getForObject(url,String.class);返回字符串类型的结果。

复制代码
@Controller
public class TestController{
     @Autowired
     private RestTemplate restTemplate;
     
     @RequestMapping("/classRemoteApi")
     public String callRemoteApi(){
         String ur"http://172.33.20.101:8080/api";
         String result=restTemplate.getForObject(url,String.class);
         return result;
     } 
}

【2、返回更加详细的返回值信息】

restTemplate.getForEntity(url, String.class); 获取请求状态码、响应头等信息。

复制代码
public ResponseEntity<String> callRemoteApiWithResponseEntity() {
    String url = "http://example.com/api/data"; // 远程接口URL
    try {
        return restTemplate.getForEntity(url, String.class); 

    } catch (Exception e) {
        // 处理异常情况
        System.err.println("Error: " + e.getMessage());
    }
    return null;
}

【3、发送post等其他请求】

服务的api可能是post,put,delete等请求类型,可以使用如下方式进行操作

复制代码
public String postData(String url, Object requestBody) {
    HttpHeaders headers = new HttpHeaders();
    //配置数据交互类型为JSON
    headers.setContentType(MediaType.APPLICATION_JSON); 
    //HttpEntity存储请求头和请求体信息
    HttpEntity<Object> entity = new HttpEntity<>(requestBody, headers); 
    return restTemplate.postForObject(url, entity, String.class);
}
相关推荐
全栈小刘1 小时前
Claude Code 为什么这么顺?Anthropic 最新复盘:真正撑住它的不是模型,而是缓存
后端
敖正炀1 小时前
WebFlux 深度:Reactor 线程模型、背压与错误处理
spring boot
BING_Algorithm1 小时前
一文搞定 AOP 所有核心知识点
spring boot·后端·spring
善恶怪客1 小时前
Java-数据类型
java
学习3人组2 小时前
Mes全连路架构图
java·erp
上弦月-编程2 小时前
C语言指针从入门到实战
java·jvm·算法
Cyan_RA92 小时前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
逻辑驱动的ken2 小时前
Java高频面试考点场景题20
java·开发语言·深度学习·面试·职场和发展
GISer_Jing2 小时前
AI全栈工程师知识体系全景:从前后端核心架构到落地项目全拆解
前端·人工智能·后端·ai编程
bzmK1DTbd2 小时前
Java游戏服务器:Netty框架的高并发网络通信
java·服务器·游戏