Spring模拟HTTP請求——RestTemplate類使用的了解
上一階段wab項目由于需要跨系統通路,從同僚之前寫的代碼中發現了RestTemplate類,才知道Spring已經對wab請求已經封裝過了(我是不是落伍了),随後對RestTemplate類進行了一些測試研究(未深入,僅在使用層面上進行),現将我對RestTemplate類的了解寫下來,友善别人及未來的我使用。
RestTemplate的聲明:
1、RestTemplate會在String啟動時注冊成bean是以第一種方式是直接注入擷取RestTemplate對象:
@Autowired
RestTemplate restTemplate;
2、 RestTemplate提供了無參構造方法,可以直接new
RestTemplate restTemplate=new RestTemplate();
RestTemplate的使用:
由于RestTemplate類的主要方法使用都大同小異,這裡僅拿postForObject方法進行舉例。
postForObject方法是進行一次post請求傳回一個任意對象(Spring會将傳回值自動序列化),
postForObject方法有3個及3個以上參數,但僅使用3個參數已經可以滿足日常需要,
restTemplate.posForObject(String url位址,Object 傳遞參數,Class 傳回值映射對象)
其中
url位址:必須為全限定位址如http://www.baidu.com/,
傳遞參數:必須使用 MultiValueMap對象(其實可以使用其他對象但有些對象是不會将參數請求進去比如Map,尚不清楚原理,如果有大神知道還請告知)
MultiValueMap對象的泛型為<String,List>其他泛型使用都會報錯。其他使用方式參考Map
傳回值映射對象:可以使用Object,Map,String等,Spring強大的序列化映射機制會将傳回檔案映射成任何可以映射的類型
當傳回檔案不能轉換為傳回值映射對象時會報序列化異常
傳回值:傳回值類型為傳回值映射對象類型。
執行個體:
下面的執行個體為無條件轉發并接收傳回值的執行個體供參考:
@RequestMapping("/{urls}")
@ResponseBody
public Object metadataTable(@PathVariable("urls") String urls,@RequestParam MultiValueMap value) {
StringBuilder url = new StringBuilder("http://www.baidu.com");
System.out.println("請求url:"+url.toString());
System.out.println("接收參數:"+value.toString());
Object map =restTemplate.postForObject(url.toString(),value, Object.class);
System.out.println("接收資料:"+map.toString());
return map;
}
//較為自定義的情況
@RequestMapping({"/auth/**"})
public ResponseEntity metadataTable(HttpServletRequest request,HttpEntity httpEntity,HttpMethod method) {
StringBuilder url = new StringBuilder("http://127.0.0.1:9999");
url.append(request.getServletPath());
url.append('?').append(request.getQueryString());
ResponseEntity map=restTemplate.exchange(url.toString(),method,httpEntity,byte[].class);
return map;
}