RestTemplate的簡單使用

Spring框架提供的發起http請求服務的封裝,依賴於JDK的HTTP連接工具,提供了大量簡單的http請求方法。簡化了發起http訪問的代碼編寫。媽媽再也不用擔心我寫一堆Connection,OS WriteOutPutStream, HttpClient那些老舊的方式了。(底層也是java.net包的,封裝了一個HttpClient),同時它還能方便的指定返回值類型,還能順便幫我們映射轉換成POJO,是非常方便。

怎麼用

RestTemplate restTemplates = new RestTemplate();

// get請求(無參):
String XX = restTemplates.getForEntity(URL , String.class).getBody();
Object o = restTemplates.getForObject( URL , String.class).getBody();
A a = restTemplates.getForObject( URL , A.class).getBody();

getForEntity方法返回值不能映射到自定義的POJO,而是要返回一個String或者JSON,自己再用FastJson什麼的工具解析。
getForObject可以將HTTP轉成POJO,但是getForObject沒有處理response的能力。因爲它拿到手的就是成型的pojo。省略了很多response的信息。

// get請求(帶參)
(1)遵循rest FULL風格
String XX = restTemplates.getForEntity(URL/XX/XX , String.class, 參數一,參數二).getBody();
(2)簡單粗暴跟在URL後面
String XX = restTemplates.getForEntity(‘URL?參數一=XX&參數二=XX ’, String.class).getBody();

打印一下返回值就能發現都成功,本來想把代碼撲上來的,但是是公司內部代碼,像內褲一樣不方便展示。我也懶得自己做demo,就這樣了。

post請求:
RestTemplate restTemplate = new RestTemplate();
B b = new B();
A a = restTemplate.postForObject( URL, B, A.class);
其中B是發出去的數據,只不過我這裏是對象,也可以是別的。弱弱的說一句其實post請求,參數放在URL後面拼着也行,只是有點不符合規矩,有點醜,但是也是可以的。

爲什麼如果是ForObject就可以自動映射自動轉換呢,底層有個HttpMessageConverter轉換器幫助我們做的轉換操作,不單止JSON,它還能將數據根據你傳過來的class類型轉Object(MappingJackson2HttpMessageConverter轉換器),轉XML(MappingJackson2XmlHttpMessageConverter轉換器),轉Text(StringHttpMessageConverter轉換器),也可以自定義轉換器,通過實現org.springframework.http.converter.HttpMessageConverter接口重寫一個(我沒試過,改天業務需求用到了再去玩玩)。

而且它還有很多其他功能,比如鑑權,比如攔截都可以做,但是我做的需求目前只是優雅簡單發個http的請求而已,所以就沒用到,期待後續再跟他偶遇深入瞭解一下~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章