SpringCloud开发实战(二):通过RestTemplate实现远程调用

目录
SpringCloud开发实战(一):搭建SpringCloud框架

RestTemplate介绍

RestTemplate 是 Spring 框架中的一个类,它用于促进 HTTP 请求的发送和接收,并且简化了与 RESTful 服务的交互。RestTemplate 提供了许多便利的方法来执行诸如 GET、POST、PUT 和 DELETE 这样的 HTTP 操作。它支持多种数据类型的消息转换,比如 JSON 和 XML,并且可以方便地与 Spring 的 HttpMessageConverters 配合使用来处理请求和响应体。

一、前言

在order-service服务中,有一个根据id查询订单的接口:

根据id查询订单,返回值是Order对象,如图:

这里的user是空的

而在user-service中有一个根据id查询用户的接口:

那如果我们现在要给这个User赋值,就是在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。我们需要在order-service中 向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。

大概的步骤是这样的:

  • 注册一个RestTemplate的实例到Spring容器
  • 修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User
  • 将查询的User填充到Order对象,一起返回

二、注册RestTemplate

首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:

java 复制代码
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("org.demo.mapper")
@SpringBootApplication
public class OrderApplication {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

三、实现远程调用

我们要在OrderService中注入RestTemplate ,然后再修改OrderService类中的queryOrderById方法,修改分成四步。具体看下面代码

java 复制代码
import org.demo.entity.Order;
import org.demo.entity.User;
import org.demo.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public Order queryById(Long id) {
        //1.查询订单
        Order order = orderMapper.findById(id);

        //2.远程查询User
        //2.1 设置url地址
        String url = "http://localhost:8082/user/" + order.getUserId();
        //2.2发起调用
        User user = restTemplate.getForObject(url,User.class);
        //3.存入user对象中
        order.setUser(user);
        //返回
        return order;
    }
}

四、测试

最后我们来启动一下OrderService和UserService,测试User是否已经注入。同样是请求http://localhost:8081/order/101 地址,发现User已经成功注入了。

至此,我们成功通过RestTemplate实现远程调用,如果文章有任何错误,还请大家指出。不胜感激!!!

相关推荐
陈随易1 分钟前
神级 Skill,让 AI 用 HTML 代替 Markdown 回复
前端·后端·程序员
Gopher_HBo1 分钟前
go tool trace 使用指南(Go 1.24)
后端
一条Go2 分钟前
能力套餐:菜单、权限、开通范围怎么拆成三层而不打架
后端·github·saas
dpharness2 分钟前
我给 DSH 装记忆插件,踩了五个坑,其中一个让我丢了一条记录
后端
就像楞次定律3 分钟前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(2)
linux·后端
烬羽5 分钟前
LangChain v1 中间件实战:不碰主流程,也能给 Agent 装上"外挂"
后端·langchain·agent
泡海椒9 分钟前
jquick-pdf 生成征信报表(相关矩阵版):靛蓝主题报告里动态图与说明面板并排的实测笔记
后端
IT枫斗者枫哥11 分钟前
Java 退款请求超时,先查原单还是重试?
java·后端
特立独行的猫A15 分钟前
我用仓颉写了个多平台发文工具:一份 Markdown,一条命令发六个平台
java·后端·python
HUANGZHENXUAN12317 分钟前
代码解析(二):detect_video.py —— 一个纯函数 + 一段主循环
后端