所以我拥有一个完美的Spring应用程序。我的大多数控制器方法都是针对ajax调用,通过@ResponseBody使用jackson api返回JSON并将我的Java POJO返回给JSON。
我需要将XML转换为JSON,因此我发现Jackson有一个工具,我将其添加到我的POM中以使用该库:
{{1}}
所以我可以使用它:
{{1}}
但现在@ResponseBody正在返回XML而不是JSON。我删除依赖项,控制器再次返回JSON。
任何方式来获得两者?我想要响应体中的xmlMapper和JSON。
答案 0 :(得分:0)
阅读this以分析Spring如何进行内容协商并允许生成XML或JSON。
最简单的方法是在网址上添加扩展程序:而不是/path/resource
使用/path/resource.json
您还可以添加format
参数,例如/path/resource?format=json
或传递适当的Accept
标题
答案 1 :(得分:0)
jackson-dataformat-xml
似乎正在向MappingJackson2HttpMessageConverter
注册XmlMapper
以及其他与XML一起使用的HttpMessageConverter
。如果您始终打算从控制器中返回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().contains(MediaType.APPLICATION_XML);
}
private boolean hasXmlMapper(HttpMessageConverter converter) {
return converter instanceof MappingJackson2HttpMessageConverter
&& ((MappingJackson2HttpMessageConverter)converter).getObjectMapper().getClass().equals(XmlMapper.class);
}
}
对于较旧的Spring版本,将implements WebMvcConfigurer
替换为extends WebMvcConfigurerAdapter
答案 2 :(得分:0)