Java 避免将Jackson xmlMapper用作Spring的默认对象映射器

Java 避免将Jackson xmlMapper用作Spring的默认对象映射器,java,spring,jackson,Java,Spring,Jackson,为了反序列化软件中的xml文件,我必须将此依赖项添加到pom.xml中 com.fasterxml.jackson.dataformat jackson数据格式xml 然而,Spring(4.1.6)现在似乎将其用作默认的objectMapper,所有未显式作为json请求的rest响应都以xml返回 AbstractJackson2HttpMessageConverter似乎走错了路 我试图通过将其添加到app-config.xml来强制使用默认对象映射器,但它没有改变任何东西: <

为了反序列化软件中的xml文件,我必须将此依赖项添加到pom.xml中


com.fasterxml.jackson.dataformat
jackson数据格式xml

然而,Spring(4.1.6)现在似乎将其用作默认的objectMapper,所有未显式作为json请求的rest响应都以xml返回

AbstractJackson2HttpMessageConverter似乎走错了路

我试图通过将其添加到app-config.xml来强制使用默认对象映射器,但它没有改变任何东西:

<bean name="jacksonMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="jacksonMapper" />
            </bean>
        </list>
    </property>
</bean>


我可能不得不将jackson改为xstream,因为它不扩展objectMapper,因此与Spring的工作方式不同,但这比设置Spring要复杂得多。

我最终找到了某种解决方案,不得不引入两种相对粗糙的黑客。但是,考虑到春季的问题是如何硬编码的,这是我能看到的处理这个问题的唯一方法

在SpringMVC方面,我必须扩展
WebMVCConfigureAdapter
覆盖以下方法。这只需取出消息转换器:

public void extendedmessageconverters(列表arestemplate.getMessageConverters().removeIf(aConverter->(MappingJackson2XmlHttpMessageConverter的转换实例));
}
我选择删除不需要的转换器,而不是指定一个硬编码消息转换器列表,因为这不会为将来的升级锁定我太多

@Autowired
private List<RestTemplate> restTemplates;

@PostConstruct
public void removeXmlMessageConverter ()
{
   restTemplates.forEach (aRestTemplate -> aRestTemplate.getMessageConverters ().removeIf (aConverter -> (aConverter instanceof MappingJackson2XmlHttpMessageConverter)));
}