默认
RestTemplate构造函数注册一组
HttpMessageConverter:
this.messageConverters.add(new ByteArrayHttpMessageConverter());this.messageConverters.add(new StringHttpMessageConverter());this.messageConverters.add(new ResourceHttpMessageConverter());this.messageConverters.add(new SourceHttpMessageConverter());this.messageConverters.add(new XmlAwareFormHttpMessageConverter());if (jaxb2Present) { this.messageConverters.add(new Jaxb2RootElementHttpMessageConverter());}if (jacksonPresent) { this.messageConverters.add(new MappingJacksonHttpMessageConverter());}if (romePresent) { this.messageConverters.add(new AtomFeedHttpMessageConverter()); this.messageConverters.add(new RssChannelHttpMessageConverter());}
该
MappingJacksonHttpMessageConverter轮流,造成
ObjectMapper直接实例。你可以找到该转换器并替换
ObjectMapper或注册一个新的转换器。这应该工作:
@Beanpublic RestOperations restOperations() { RestTemplate rest = new RestTemplate(); //this is crucial! rest.getMessageConverters().add(0, mappingJacksonHttpMessageConverter()); return rest;}@Beanpublic MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter() { MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter(); converter.setObjectMapper(myObjectMapper()); return converter;}@Beanpublic ObjectMapper myObjectMapper() { //your custom ObjectMapper here}
在XML中,遵循以下原则:
<bean id="restOperations" > <property name="messageConverters"> <util:list> <bean /> <bean /> <bean /> <bean /> <bean /> <bean /> <bean > <property name="objectMapper" ref="customObjectMapper"/> </bean> </util:list> </property></bean><bean id="customObjectMapper" />
请注意,转换并不是真正的1:1-我必须显式地
messageConverters以XML 创建列表,而采用
@Configuration这种方法,我可以引用现有列表并直接对其进行修改。但这应该可行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)