引入 jackson-dataformat-xml 后,默认响应结果是 json 还是 xml?

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引入 jackson-dataformat-xml 后,默认响应结果是 json 还是 xml?相关的知识,希望对你有一定的参考价值。

背景

继续接上一篇的文章,项目中同时加入了 JSON 和 XML 解析器后,一个请求没有设置 produces 属性时,得到的数据是什么类型呢?本文来探讨这个问题。

引用 XML 解析包

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.0</version>
</dependency>

定义测试类

定义一个测试 Controller ,添加一个方法:

@RestController
public class TestJson {

    @RequestMapping(value="/hello/json")
    @ResponseBody
    public MyData hello(){
        return new MyData("wang",System.currentTimeMillis());
    }

    @Data
    class MyData {
        private String name;

        private Long time;
        public MyData(String name,Long time) {

            this.name = name;
            this.time = time;
        }
    }
}

未指定 proceduces 的请求响应值问题

一个请求未指定 produces 的时候,它返回的数据是什么类型呢?
这里用浏览器请求的时候,返回了 XML 类型:

因为 accept 头域的 application/xml 先于 */* 被解析了。

用 postman 发送,则得到的是却是 JSON 数据:

启示录

如果项目中同时包含 XML 和 JSON 消息解析器,那么需要检查所有的方法,为其指定 produces 属性,因为不同客户端请求时的 accept 头域可能有差异,最终会导致后端使用的解析器不一样。

以上是关于引入 jackson-dataformat-xml 后,默认响应结果是 json 还是 xml?的主要内容,如果未能解决你的问题,请参考以下文章

项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析

项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析

项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析

使用 jackson-dataformat-xml 库将 XML 中的空标签转换为 java 属性

Springboot引用jackson-dataformat-xml后如何返回json

java对象转xml的问题 用的是jackson-dataformat-xml.jar