So I had一个完美运行的 Spring 应用程序。我的大多数控制器方法用于 ajax 调用,这些调用通过 @ResponseBody 使用 jackson api 返回 JSON,并将我的 Java POJO 返回为 JSON。
我需要将 XML 转换为 JSON,所以我发现 Jackson 有一个用于此目的的工具,我将其添加到我的 POM 中以使用该库:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version>
</dependency>
这样我就可以使用这个:
XmlMapper xmlMapper = new XmlMapper();
JsonNode node = xmlMapper.readTree(sb.toString().getBytes());
但现在 @ResponseBody 返回 XML 而不是 JSON。我删除了依赖项,控制器再次返回 JSON。
有什么办法可以两者兼得吗?我想要 xmlMapper 和响应正文中的 JSON。
jackson-dataformat-xml
似乎正在注册一个MappingJackson2HttpMessageConverter
with a XmlMapper
,以及其他HttpMessageConverter
可以使用 XML。如果您总是打算从控制器返回 JSON,您可以更改什么HttpMessageConverter
您的应用程序通过覆盖使用configureMessageConverters
对于 Spring 5.0 及更高版本,
@Configuration
public class HttpResponseConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.removeIf(converter -> supportsXml(converter) || hasXmlMapper(converter));
}
private boolean supportsXml(HttpMessageConverter<?> converter) {
return converter.getSupportedMediaTypes().stream()
.map(MimeType::getSubtype)
.anyMatch(subType -> subType.equalsIgnoreCase("xml"));
}
private boolean hasXmlMapper(HttpMessageConverter<?> converter) {
return converter instanceof MappingJackson2HttpMessageConverter
&& ((MappingJackson2HttpMessageConverter)converter).getObjectMapper().getClass().equals(XmlMapper.class);
}
}
对于旧版本的 Spring,替换implements WebMvcConfigurer
with extends WebMvcConfigurerAdapter
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)