Spring提供了一种简单便捷的模板类 RestTemplate
来调用 RESTful
接口。它提供了多种便捷访问HTTP服务的方法,能够大大提高客户端的编写效率。
RestTemplate方法 | HTTP方法 |
---|---|
getForEntity | GET |
getForObject | GET |
postForEntity | POST |
postForObject | POST |
put | PUT |
patch | PATCH |
delete | DELETE |
exchange | any |
execute | any |
GET
请求,不带参。GET
请求,带参。POST
请求,带参。POST
请求,带有请求体。实体类,需要提供有参和无参构造
RestTemplate配置类
用一个数字做占位符。最后是一个可变长度的参数,用来替换前面的占位符。
使用 name={name}
这种形式。最后一个参数是map,map的key为前边占位符的名字,value为实际参数值。
getForObject
是对getForEntity
函数的进一步封装,只关注返回消息的实体内容。
用post方法发送带参的请求时,Map不能被定义为 HashMap
、LinkedHashMap
,而应被定义为 LinkedMultiValueMap
,这样参数才能成功传递到后台。
和 getForObject
相对应,只关注返回的消息体。
RestTemplate
底层实现序列化和反序列化。
HttpEntity
还支持带有HTTP请求头的构造方法。
用RestTemplate
发送PUT
、PATCH
、DELETE
方法与GET
、POST
方法非常类似,这里不做展开。
ClientHttpRequestFactory
是Spring定义的一个接口,用于生产ClientHttpRequest
对象,RestTemplate
只是模板类,抽象了很多调用方法,而底层真正使用何种框架发送HTTP请求是通过ClientHttpRequestFactory
指定的。
RestTemplate
默认使用的是SimpleClientHttpRequestFactory
,其内部使用的是JDK的java.net.HttpURLConnection
创建底层连接,默认是没有连接池的。可以通过 setRequestFactory
函数设置不同的HTTP源,比如 Apache HttpComponents
、Netty
和OkHttp
。
设置Apache HttpComponents
为HTTP客户端源
RestTemplate
默认使用 jackson
来实现序列化和反序列化,默认情况下会注册MIME
类型的转换器,但可以通过 setMessageConverters
函数指定其他类型的转化器。
这里其实也可以用FastJson
库的FastJsonHttpMessageConverter4
类来做转换器,只是近些年FastJson
屡爆漏洞,还是建议用默认的jackson
来实现。