天天看點

Spring模拟HTTP請求——RestTemplate類使用的了解

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;
	}