使用Jackson自定义序列化操作(Jackson – Custom Serializer)

文章介绍了如何在Jackson库中使用标准序列化和自定义序列化方式来处理对象图,包括`ObjectMapper`的使用和自定义`ItemSerializer`实现,展示了如何控制输出结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Standard Serialization of an Object Graph

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item {
    public int id;
    public String itemName;
    public User owner;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    public int id;
    public String name;
}
Item myItem = new Item(1, "theItem", new User(2, "theUser"));

String serialized = new ObjectMapper().writeValueAsString(myItem);

System.out.println(serialized);

结果
{"id":1,"itemName":"theItem","owner":{"id":2,"name":"theUser"}}

Custom Serializer on the ObjectMapper

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item {
    public int id;
    public String itemName;
    public User owner;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    public int id;
    public String name;
}
public class ItemSerializer extends StdSerializer<Item> {
    public ItemSerializer() {
        this(null);
    }
    public ItemSerializer(Class<Item> t) {
        super(t);
    }
    @Override
    public void serialize(Item value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeNumberField("id", value.id);
        jsonGenerator.writeStringField("itemName", value.itemName);
        jsonGenerator.writeNumberField("owner", value.owner.id);
        jsonGenerator.writeEndObject();
    }
}
Item myItem = new Item(1, "theItem", new User(2, "theUser"));

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Item.class, new ItemSerializer());
mapper.registerModule(module);

String serialized = mapper.writeValueAsString(myItem);

System.out.println(serialized);

结果
{"id":1,"itemName":"theItem","owner":2}

Custom Serializer on the Class

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    public int id;
    public String name;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonSerialize(using = ItemSerializer.class)
public class Item {
    public int id;
    public String itemName;
    public User owner;
}
Item myItem = new Item(1, "theItem", new User(2, "theUser"));

String serialized = new ObjectMapper().writeValueAsString(myItem);

System.out.println(serialized);

结果
{"id":1,"itemName":"theItem","owner":2}

-----------------------------------------------------------------------------读书笔记摘自 文章:Jackson – Custom Serializer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值