gpt4 book ai didi

java - 为什么 Jackson XML 反序列化不尊重任何注释?

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:25 26 4
gpt4 key购买 nike

我一直在阅读有关 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。

最佳答案

jackson-xml-databind 0.6.2 版本于 2011 年 11 月 11 日 发布。在链接的文章中,建议使用 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

关于java - 为什么 Jackson XML 反序列化不尊重任何注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54449468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com