【发布时间】:2021-03-22 18:57:50
【问题描述】:
我必须在一个遗留的 spring 5 [not boot] 项目上工作,我面临着类似的问题jackson-dataformat-xml turns @ResponseBody to XML 所以我开始使用 XMLMapper - 输入是应用程序/文本 [这是 xml 字符串],输出应该是控制器中的 json。但是我一添加依赖项就看到了
<dependency>
<artifactId>jackson-dataformat-xml</artifactId>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<version>2.10.2</version>
</dependency>
响应似乎不再是 JSON,而是 xml 我无法弄清楚应该做什么。我需要使用 xmlmapper 来避免 JAXB2 。任何示例配置。 [Java 配置也可以,但不要使用 java 8 lambda 函数,因为它没有在这个遗留系统中使用[因为我们有某些遗留依赖项,比如 checkstyle 在这个项目中没有升级到 java 8。] 会有所帮助......让我知道.
我目前有以下配置,但我认为问题在于依赖关系。因此需要在配置中进行一些调整:
@Configuration
public class HttpResponseConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
}
}
【问题讨论】:
-
这可能与注册的顺序有关,尤其是当
*/*存在时。这最近也反映在 Javadoc github.com/spring-projects/spring-framework/commit/…。 -
@RossenStoyanchev 有多个地方。对于控制器,除了 extendMessageConverters 之外,我还必须在 configureContentNegotiation 中设置 defaultContentType 。该应用程序还使用了 Apache http 客户端,它是来自服务的包装器调用,它们也开始返回 xml 。对于应用程序/json,我必须使用 q =1 修复接受标头。我将尝试在 github 上发布示例玩具并在此处链接。简而言之,如果你在这个 lib 项目中使用,来自 Apache http 客户端的响应也会受到影响。
标签: spring spring-boot jackson-dataformat-xml