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);
}
相关推荐
Code88481 小时前
观察Springboot AI-Function Tools 执行过程
人工智能·spring boot·后端
百***58141 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
小蜜蜂dry2 小时前
从零到一,记录docker运行一个web端项目
后端
聆风吟º2 小时前
【Spring Boot 报错已解决】Spring Boot开发避坑指南:Hibernate实体类主键配置详解与异常修复
android·spring boot·hibernate
Boop_wu2 小时前
[Java EE] 多线程 -- 初阶(3)
java·开发语言
Felix_XXXXL2 小时前
MySQL----case的用法
java·后端
星光一影2 小时前
基于SpringBoot与Vue的海外理财系统设计与实现
vue.js·spring boot·后端·mysql·node.js·html5
晞微2 小时前
实战|SpringBoot+Vue3 医院智能预约挂号系统(含 AI 助手)
人工智能·spring boot·后端
silver98863 小时前
docker容器和分布式事务
后端