为什么Jackson XML反序列化不遵守任何注释?

时间:2019-01-30 21:01:18

标签: java xml jackson

我一直在阅读关于Jackson XML反序列化(#1#2)的教程。我试图通过编写一些Java代码来跟随示例:

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.xml.XmlMapper;

public class JacksonDemo {
    @JsonPropertyOrder({"age", "id", "name"})
    public static class Person {
        @JsonProperty("_id")
        public String id;
        public String name;
        public int age;
        @JsonIgnore
        public String note;
    }

    public static void main(String[] args) throws Exception {
        XmlMapper mapper = new XmlMapper();
        Person value = new Person();
        value.age = 4;
        value.id = "12345";
        value.name = "George";
        value.note = "Invalid";
        String s = mapper.writeValueAsString(value);
        System.out.println(s);
    }
}

根据教程,这将导致以下输出:

<Person><age>4</age><_id>12345</_id><name>George</name></Person>

但是,它将导致以下错误输出:

<Person><id>12345</id><name>George</name><age>4</age><note>Invalid</note></Person>

属性顺序不正确,“ id”字段具有不正确的XML元素,并且“ note”字段未正确包含。据说,各种Java注释都应该改变Jackson的行为,但似乎所有注释都被忽略了。有人知道为什么吗?

这是与jackson-xml-databind 0.6.2,jackson-annotations 2.6.0和jackson 2.6.5。

1 个答案:

答案 0 :(得分:1)

版本0.6.2中的

jackson-xml-databind已于Nov 11, 2011发行。在链接的文章中,建议使用jackson-dataformat-xml库。

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

最新版本是2.9.8,我建议使用它。在下面,您可以找到示例所需的Maven依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version.core}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version.core}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>${jackson.version.core}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version.core}</version>
</dependency>

其中jackson.version.core2.9.8