当前位置: 首页 > 知识库问答 >
问题:

为什么Jackson XML反序列化不考虑任何注释?

松波
2023-03-14

我一直在阅读关于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个答案

晋承运
2023-03-14

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

这里是杰克逊。版本核心是2.9.8

 类似资料:
  • 在实体的自定义反序列化器中,我希望以一种尊重@JSONFORMAT注释的方式递归调用(部分)字段的反序列化。更具体地说,这就是反序列化器的样子: 在该示例中,jsonParser.readValueAs()不接受带注释的 是否有任何方法可以反序列化对象的字段,使其尊重注释格式?

  • 问题内容: 简介:我正在使用Hibernate Tools 4.0.0-CR1和Hibernate 4.2(包括Hibernate Validator),但是没有使用Bean验证。该模式 是 与部署时正确生成。 但是我更喜欢通过以下build.xml目标生成我的DDL: 我的hibernate-console.properties如下: 我仔细检查了jar在我的lib.path中… 示例实体如下所

  • 本文向大家介绍什么是序列化与反序列化?相关面试题,主要包含被问及什么是序列化与反序列化?时的应答技巧和注意事项,需要的朋友参考一下 序列化:将对象状态转换为可保持或传输的格式的过程。将对象实例的字段及类的名称转换成字节流,然后把字节流写入数据流 反序列化:将流转换为对象。 这两个过程结合起来,可以轻松地存储和传输数据。    

  • 我试图在Java中序列化,但在运行我的程序时,我收到一个。 查看类,我注意到它没有实现。 为什么不实现?

  • 问题内容: 我正在使用以下查询: 令人惊讶的是,该语句不包含错误值为NULL的行。我的意图是仅筛选错误值为连接错误’‘的行。我需要提供其他条件(或错误为NULL)以检索正确的结果。 为什么MYSQL会滤除带有NULL值的结果?我以为IN关键字会返回一个布尔结果(1/0),现在我知道某些MYSQL关键字不返回布尔值,它也可能会返回NULL ....但是为什么将NULL当作特殊值呢? 问题答案: 这个

  • 我读了Doug Stevenson写的这些博客文章,第1部分,第2部分,第3部分。在第二部分,他说 Realtime Database SDK使将DataSnapshot转换为JavaBean样式的对象变得非常容易 并提到我们可以使用这行代码将DataSnapshot反序列化为HotStock对象(一个JavaBean类) HotStock stock=datasnapshot.getValue(