我一直在阅读关于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。
答案 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.core
是2.9.8
。