说明:在微服务架构开发中,一个请求是通过模块之间的互相通信来完成的,如下面这个场景:
创建两个子模块:订单模块(端口8081)、用户模块(端口8082),两个模块之间没有联系,现在需要查询订单,根据订单中的用户ID,查询该订单对应的用户信息。
(两个模块是独立的)

用户实体类
import lombok.Data;
import java.io.Serializable;
/**
 * 用户
 */
@Data
public class User implements Serializable {
    /**
     * ID
     */
    private Long id;
    /**
     * 用户名
     */
    private String username;
    /**
     * 地址
     */
    private String address;
}
订单实体类,查询订单需要补充用户信息
import lombok.Data;
import java.io.Serializable;
/**
 * 订单
 */
@Data
public class Order implements Serializable {
    /**
     * ID
     */
    private Long id;
    /**
     * 价格
     */
    private Double price;
    /**
     * 用户ID
     */
    private Long userId;
    /**
     * 商品名
     */
    private String name;
    /**
     * 商品数量
     */
    private Integer num;
    /**
     * 用户信息
     */
    private User user;
}
此时,因为订单模块中没有用户业务,是没有对应的UserMapper类操作数据库的。这就需要向用户模块发送请求,并传递用户ID,由用户模块里对应的方法去操作数据库,返回用户信息。可以用以下两种方式实现。
方式一:Hutool工具包
可使用Hutool工具包中的get(),向用户模块发送查询用户信息请求;
    @Override
    public Order getOrder(Long id) {
        Order order = orderMapper.getOrder(id);
        // 向用户模块发送请求
        String s = HttpUtil.get("http://localhost:8082/user?id=" + order.getUserId());
        // 解析相应结果
        User user = JSONUtil.toBean(s, User.class);
        order.setUser(user);
        return order;
    }
方式二:RestTemplate
使用RestTemplate中的getForEntity()方法,也可以达到同样的效果,使用前,需要手动添加该类到IOC容器中;
(手动添加Bean到IOC容器中)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class AddBean {
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
(使用RestTemplate的getForEntity方法,向用户模块发送请求)
    @Autowired
    private RestTemplate restTemplate;
	
    @Override
    public Order getOrder(Long id) {
        Order order = orderMapper.getOrder(id);
        // 使用restTemplate的getForEntity()方法向用户模块发送请求
        ResponseEntity<User> entity = restTemplate.getForEntity("http://localhost:8082/user?id=" + order.getUserId(), User.class);
        // 响应结果是一个response实例,先判断响应状态码是不是成功
        if (entity.getStatusCode().is2xxSuccessful()) {
            
            // 取出响应数据使用
            User user = entity.getBody();
            order.setUser(user);
        }
        return order;
    }
restTemplate.getForEntity()方法返回值类型

测试
postman测试,两者都可以达到相同的效果




















