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实例:
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方法,修改分成四步。具体看下面代码
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实现远程调用,如果文章有任何错误,还请大家指出。不胜感激!!!