实现远程调用有很多种方式,这里我们使用RestTemplate来进行实现。
REST :表现层资源状态转移(资源在网络中以某种表现形式进行状态转移),是一种软件架构风格,
状态转移:数据状态的变化。
表现层:资源的表现形式。
资源:网络上的所有事务都可以抽象为资源。
RESTful:是满足REST设计风格是程序或接口。
RESTful风格特征:其统一接口可以进行对资源进行操作,比如获取、删除、创建、修改。这些操作正好对应上HTTP协议提供的GET、POST、PUT和DELETE等方法。但是这种风格的接口,只能从接口上定义其资源,但是无法通过接口了解具体对资源进行了什么操作。
RestTemplate: 是Spring提供的,用来封装HTTP调用,并强制使用RESTful风格,它会处理HTTP连接和关闭,只需要使用者童工资源的地址和参数即可。
- 定义RestTemplate
@Configuration
public class BeanConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
定义bean可以使用五大注解或者@Bean的方式来定义,但是RestTemplate是第三方的类,五大注解只能修饰自己的类,所以我们使用@Bean来进行修饰。
- 实现调用
这里我以订单系统和商品服务为例:
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId) {OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url = "http://127.0.0.1:9090/product/" + orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);//通过url来获取到资源,并且返回值的格式是ProductInfoorderInfo.setProductInfo(productInfo);return orderInfo;}
}