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实现远程调用,如果文章有任何错误,还请大家指出。不胜感激!!!

相关推荐
全栈小刘几秒前
Claude Code 为什么这么顺?Anthropic 最新复盘:真正撑住它的不是模型,而是缓存
后端
BING_Algorithm7 分钟前
一文搞定 AOP 所有核心知识点
spring boot·后端·spring
budingxiaomoli20 分钟前
多机部署,负载均衡-LoadBalancer
运维·spring cloud·负载均衡
Cyan_RA921 分钟前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
GISer_Jing26 分钟前
AI全栈工程师知识体系全景:从前后端核心架构到落地项目全拆解
前端·人工智能·后端·ai编程
longxibo28 分钟前
【Flowable 7.2 源码深度解析与实战-前言】
java·后端·流程图
全栈小刘33 分钟前
ChatGPT账号打通OpenClaw?Codex又整了个“电子宠物”,开发者这下真坐不住了
后端
陈随易1 小时前
bun将会支持Bun.image,你怎么看?
前端·后端·程序员
念何架构之路1 小时前
Go Web基础和Http演进
开发语言·后端·golang
绿草在线1 小时前
SpringBoot项目实战:从零搭建高效开发环境
java·spring boot·后端