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的请求而已,所以就没用到,期待后续再跟他偶遇深入了解一下~

你可能感兴趣的:(Spring,Java实战项目分享)