gpt4 book ai didi

spring - 使用 RestTemplate 时如何配置内部 Jackson 映射器?

转载 作者:IT老高 更新时间:2023-10-28 13:01:52 27 4
gpt4 key购买 nike

我想更新 Spring RestTemplate 使用的 jackson 映射器的 SerializationConfig.Feature... 属性,知道如何获取它或我可以/应该在哪里配置它。

最佳答案

默认的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 或在其之前注册一个新转换器。这应该有效:

@Bean
public RestOperations restOperations() {
RestTemplate rest = new RestTemplate();
//this is crucial!
rest.getMessageConverters().add(0, mappingJacksonHttpMessageConverter());
return rest;
}

@Bean
public MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter() {
MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
converter.setObjectMapper(myObjectMapper());
return converter;
}

@Bean
public ObjectMapper myObjectMapper() {
//your custom ObjectMapper here
}

在 XML 中是这样的:

<bean id="restOperations" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<util:list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="customObjectMapper"/>
</bean>
</util:list>
</property>
</bean>

<bean id="customObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"/>

请注意,转换并不是真正的 1:1 - 我必须在 XML 中显式创建 messageConverters 列表,而使用 @Configuration 方法我可以引用现有的并且简单修改它。但这应该可行。

关于spring - 使用 RestTemplate 时如何配置内部 Jackson 映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9381665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com