實現遠程調用有很多種方式,這里我們使用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;}
}