RestTemplate是在客户端访问 Restful 服务的一个核心类;RestTemplate通过提供回调方法和允许配置信息转换器来实现个性化定制RestTemplate的功能,通过RestTemplate可以封装请求对象,也可以对响应对象进行解析。
技巧01:RestTemplate默认使用JDK提供的包去建立HTTP连接,当然,开发者也可以使用诸如 Apache HttpComponents, Netty, and OkHttp 去建立HTTP连接。
技巧02:RestTemplate内部默认使用HttpMessageConverter来实现HTTTP messages 和 POJO 之间的转换,可以通过RestTemplate的成员方法 setMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>). 去修改默认的转换器。
技巧03:RestTemplate内部默认使用SimpleClientHttpRequestFactory and DefaultResponseErrorHandler 去创建HTTP连接和处理HTTP错误,可以通过HttpAccessor.setRequestFactory(org.springframework.http.client.ClientHttpRequestFactory) and setErrorHandler(org.springframework.web.client.ResponseErrorHandler)去做相应的修改。.
1.1 RestTemplate中方法概览RestTemplate为每种HTTP请求都实现了相关的请求封装方法
技巧01:这些方法的命名是有讲究的,方法名的第一部分表示HTTP请求类型,方法名的第二部分表示响应类型
例如:getForObject 表示执行GET请求并将响应转化成一个Object类型的对象
技巧02:利用RestTemplate封装客户端发送HTTP请求时,如果出现异常就会抛出 RestClientException 类型的异常;可以通过在创建RestTemplate对象的时候指定一个ResponseErrorHandler类型的异常处理类来处理这个异常
技巧02:exchange 和 excute 这两个方法是通用的HTTP请求方法,而且这两个方法还支持额外的HTTP请求类型【PS: 前提是使用的HTTP连接包也支持这些额外的HTTP请求类型】
技巧03:每种方法都有3个重载方法,其中两个接收String类型的请求路径和响应类型、参数;另外一个接收URI类型的请求路径和响应类型。
技巧04:使用String类型的请求路径时,RestTemplate会自动进行一次编码,所以为了避免重复编码问题最好使用URI类型的请求路径
例如:restTemplate.getForObject("http://example.com/hotel list") becomes"http://example.com/hotel%20list"
技巧05:URI 和URL 知识点扫盲
参考博文01 参考博文02
技巧06:利用接收URI参数的RestTemplate.getForObject方法发送Get请求
1.2 常用构造器技巧01:利用无参构造器创建RestTemplate实例时,什么都是使用默认的【即:使用HttpMessageConverter来实现HTTTP messages 和 POJO 之间的转换、使用SimpleClientHttpRequestFactory and DefaultResponseErrorHandler 去创建HTTP连接和处理HTTP错误】
技巧02:利用 RestTemplate(ClientHttpRequestFactory requestFactory) 创建RestTemplate实例时使用自定义的requestFactory去创建HTTP连接
技巧03:利用 RestTemplate(java.util.List<HttpMessageConverter<?>> messageConverters) 创建RestTemplate实例时使用自定义的转换器列表实现HTTTP messages 和 POJO 之间的转换
1.3 GET相关方法技巧01:本博文使用的是SpringBoot项目,利用了一个配置文件来将RestTemplate注入的容器中