相关疑难解决方法(0)

如何在Jackson中使用自定义Serializer?

我有两个Java类,我想使用Jackson序列化为JSON:

public class User {
    public final int id;
    public final String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

public class Item {
    public final int id;
    public final String itemNr;
    public final User createdBy;

    public Item(int id, String itemNr, User createdBy) {
        this.id = id;
        this.itemNr = itemNr;
        this.createdBy = createdBy;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将Item序列化为此JSON:

{"id":7, "itemNr":"TEST", "createdBy":3}
Run Code Online (Sandbox Code Playgroud)

用户序列化只包括id.我还可以将所有用户对象serilize为JSON,如:

{"id":3, "name": "Jonas", "email": "jonas@example.com"}
Run Code Online (Sandbox Code Playgroud)

所以我想我需要编写一个自定义序列化器Item并尝试使用它:

public class ItemSerializer …
Run Code Online (Sandbox Code Playgroud)

java serialization json jackson

101
推荐指数
8
解决办法
21万
查看次数

Jackson,针对特定字段名称的自定义反序列化

我想知道是否可以根据字段名称自定义json的反序列化

{
   id: "abc123",
   field1: {...}
   other: {
        field1: {....}
     }
}
Run Code Online (Sandbox Code Playgroud)

在上一个json中,我想在json的任何级别中为名为“ field1”的字段提供一个自定义反序列化器。

原因:我们将数据持久化为JSON,并且有一个REST服务返回该数据,但是在返回数据之前,该服务必须在“ field1”属性中注入额外的信息。

这些类型非常动态,因此我们无法定义Java类来映射json以使用注释。

第一种方法是反序列化为Map.class,然后使用JsonPath搜索$ .. field1模式,但是此过程对于较大的对象而言是昂贵的。

感谢您的帮助。

谢谢,

埃德温·米格尔(Edwin Miguel)

java json jackson deserialization

5
推荐指数
1
解决办法
4467
查看次数

标签 统计

jackson ×2

java ×2

json ×2

deserialization ×1

serialization ×1