【发布时间】:2019-06-24 06:11:35
【问题描述】:
我一直在阅读有关 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。
【问题讨论】: