如何配置SpringTemplate的HTTP消息转换器及默认支持类型?
作者:zsf_lance
本文整理了SpringTemplate中各种消息转换器的默认支持类型,包括ByteArray、String、Resource、MappingJackson2等,帮助开发者快速了解REST通信时的数据序列化与反序列化配置,避免踩坑
spring template配置示例
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(6000);// 设置建立连接超时时间 毫秒
requestFactory.setReadTimeout(6000);// 设置读取数据超时时间 毫秒
RestTemplate restTemplate = new RestTemplate(requestFactory);
// jackson配置
ObjectMapper objectMapper = new ObjectMapper();
// 配置如果被序列化的对象没有可访问的属性 不报错,返回一个空的bean,即{}
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// 创建json消息转换器
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(objectMapper);
List<MediaType> mediaTypes = new ArrayList<>(jacksonConverter.getSupportedMediaTypes());
// 为json消息转换器新增直接text_plain类型 避免遇到响应体是json,而响应头是text/plain类型无法找到适合的解析
mediaTypes.add(MediaType.TEXT_PLAIN);
jacksonConverter.setSupportedMediaTypes(mediaTypes);
List<HttpMessageConverter<?>> messageConverters = Arrays.asList(
new ByteArrayHttpMessageConverter(),
new StringHttpMessageConverter(Charset.forName("utf-8")),
new ResourceHttpMessageConverter(),
new SourceHttpMessageConverter<>(),
new FormHttpMessageConverter(),
jacksonConverter
);
restTemplate.setMessageConverters(messageConverters);
return restTemplate;
}各种解析器默认支持的类型表
| 类名 | 支持的JavaType | 支持的MediaType |
|---|---|---|
| ByteArrayHttpMessageConverter | byte[] | application/octet-stream, */* |
| StringHttpMessageConverter | String | text/plain, */* |
| ResourceHttpMessageConverter | Resource | */* |
| SourceHttpMessageConverter | Source | application/xml, text/xml, application/*+xml |
| AllEncompassingFormHttpMessageConverter | Map<K, List<?>> | application/x-www-form-urlencoded, multipart/form-data |
| MappingJackson2HttpMessageConverter | Object | application/json, application/*+json |
| Jaxb2RootElementHttpMessageConverter | Object | application/xml, text/xml, application/*+xml |
| JavaSerializationConverter | Serializable | x-java-serialization;charset=UTF-8 |
| FastJsonHttpMessageConverter | Object | */* |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
