jackson 自定义序列化
来源:互联网 发布:音频制作软件下载 编辑:程序博客网 时间:2024/05/17 12:55
为了让输出的JSON文件更简洁,或者待序列化的类比较复杂,甚至其中某些字段没有实现 Serializable 接口,无法直接进行序列化,此时就需要自定义序列化。
首先定义两个测试类:
public class User { public int id; public String name;}public class Item { public int id; public String itemName; public User owner;}
要对 Item 类进行序列化,如果直接进行序列化:
Item myItem = new Item(1, "theItem", new User(2, "theUser"));String serialized = new ObjectMapper().writeValueAsString(myItem);
输出是这样:
{ "id": 1, "itemName": "theItem", "owner": { "id": 2, "name": "theUser" }}
现在自定义了一个序列化生成器,User 类只对 id 进行序列化,希望得到如下的输出:
{ "id": 25, "itemName": "FEDUfRgS", "owner": 15}
序列化器定义如下:
public class ItemSerializer extends StdSerializer<Item> { public ItemSerializer() { this(null); } public ItemSerializer(Class<Item> t) { super(t); } @Override public void serialize( Item value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeNumberField("id", value.id); jgen.writeStringField("itemName", value.itemName); jgen.writeNumberField("owner", value.owner.id); jgen.writeEndObject(); }}
对 ObjectMapper注册该序列化器:
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);
也可以通过注释实现序列化器的注册:
@JsonSerialize(using = ItemSerializer.class)public class Item { ...}
在使用时就不需要额外的注册麻烦:
Item myItem = new Item(1, "theItem", new User(2, "theUser"));String serialized = new ObjectMapper().writeValueAsString(myItem);
最后可获得如下输出:
{ "id": 25, "itemName": "FEDUfRgS", "owner": 15}
阅读全文
0 0
- jackson 自定义序列化
- 自定义全局jackson序列化
- jackson自定义序列化过程
- jackson中自定义处理序列化和反序列化
- jackson中自定义处理序列化和反序列化
- 定制jackson的自定义序列化(null值的处理)
- Java序列化jackson
- xstream,jackson序列化对象
- Jackson--protobuf序列化积累
- jackson joda time序列化
- 自定义Jackson
- Jackson序列化和反序列化
- Jackson 枚举序列化/反序列化
- jackson 序列化/反序列化
- Jackson序列化Java对象时注意
- 使用Jackson解析JSON和序列化
- jackson 进行json解析和序列化
- jackson的解析和序列化
- 创建学生成绩静态链表
- request_firmware
- DSSTNE
- 正确设置网站title、keywords、description
- 在JVM中,新生代和旧生代有何区别?GC的回收方式有几种?server和client有和区别?
- jackson 自定义序列化
- Ubuntu Server 16.04.1 LTS 64位 搭建LNMP
- Java分布式应用技术架构介绍
- VirtualBox虚拟机Ubuntu分辨率不能修改,解决方案
- RelativeLayout动态添加控件(2)
- 5个拓展潜客的创意方法
- 钢铁是怎样炼成的?一组动态图让你秒懂真正的钢铁是怎样炼成的!
- 全部物理宇宙全部能由数学理解
- 如何用业余时间成为抢手的数据人才?