jackson-dataformat-xml将@ResponseBody转换为XML

时间:2018-02-06 16:40:24

标签: json xml maven jackson

所以我拥有一个完美的Spring应用程序。我的大多数控制器方法都是针对ajax调用,通过@ResponseBody使用jackson api返回JSON并将我的Java POJO返回给JSON。

我需要将XML转换为JSON,因此我发现Jackson有一个工具,我将其添加到我的POM中以使用该库:

{{1}}

所以我可以使用它:

{{1}}

但现在@ResponseBody正在返回XML而不是JSON。我删除依赖项,控制器再次返回JSON。

任何方式来获得两者?我想要响应体中的xmlMapper和JSON。

3 个答案:

答案 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)

添加:

15

到请求HTTP标头。

参考:REST API - Use the "Accept: application/json" HTTP Header