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);
}
相关推荐
吴声子夜歌4 分钟前
Java面试——基础
java·开发语言·面试
newerp5 分钟前
Redis 操作与缓存策略
后端·程序员·go
newerp8 分钟前
GORM ORM 基础
后端·程序员·go
小岛前端14 分钟前
AI Skills 已经封神,但新的问题却越来越严重!
前端·后端·github
拖孩18 分钟前
一个人 + AI 做的小程序,上线 15 天赚了 10 块 5
前端·后端·微信小程序
newerp20 分钟前
CRUD 操作与预处理语句
后端·程序员·go
智码看视界24 分钟前
Day 56:AI辅助开发全面提效:Copilot + Cursor的Java开发
java·单元测试·copilot·cursor·后端开发·代码审查·ai辅助开发
wei_shuo26 分钟前
KES 数据同步与ETL实战:数据集成、转换与实时同步方案
后端
乒乓狂魔147867399700033 分钟前
LangGraph:用一张图,编排一群 AI 助手
后端
Gopher_HBo33 分钟前
请求绑定 binding(binding/ 包)
后端