@JsonCreator自定义反序列化函数-总结

本文介绍了Jackson库中@JsonCreator注解的使用,特别是在反序列化过程中的作用。通过@JsonCreator,可以自定义对象创建的方式,提供更高的灵活性,例如在处理枚举类型序列化或隐藏部分信息时。文章详细讲解了注解如何加在构造方法上,并分别探讨了单参数和多参数构造方法的情况。
摘要由CSDN通过智能技术生成

参考链接:https://www.cnblogs.com/zimug/p/13716062.html


使用场景

灵活控制对象的创建,非常规的方式设置属性,比如枚举类型的序列化、序列号时部分信息的隐藏等。

一、Jackson反序列化过程做了什么?

默认情况下,使用public无参构造函数进行对象创建,然后通过成员变量的set方法进行赋值

二、@Jsoncreator注解

可以通过使用 @JsonCreator 注解自定义反序列的过程,这样有更高的灵活性,可以完成更多的非规定动作。该注解有两种使用方式:

  • 注解加在构造方法上
  • 注解加在静态工厂方法上

2.1.@JsonCreator注解加在构造方法上

分为单参数和多参数的情况

2.1.1. 单个参数的情况

单个参数会将字符串整体传入,具体可参考@JSONCreator上的注解

package com.fan;

import lombok.Data;

@Data
public class Player {
   
Spring Boot提供了自定义JSON序列化和反序列化的方式,可以通过实现`JsonSerializer`和`JsonDeserializer`接口来实现。 自定义JSON序列化: 1. 创建一个类,实现`JsonSerializer`接口,并重写`serialize`方法。在该方法中,可以自定义对象的序列化逻辑,将对象转换为JSON格式的字符串。 2. 在需要进行自定义序列化的字段上,使用`@JsonSerialize(using = YourSerializer.class)`注解,将自定义的序列化类指定为该字段的序列化器。 自定义JSON反序列化: 1. 创建一个类,实现`JsonDeserializer`接口,并重写`deserialize`方法。在该方法中,可以自定义JSON字符串的反序列化逻辑,将JSON字符串转换为对象。 2. 在需要进行自定义反序列化的字段上,使用`@JsonDeserialize(using = YourDeserializer.class)`注解,将自定义反序列化类指定为该字段的反序列化器。 示例代码如下: ```java // 自定义序列化器 public class CustomSerializer extends JsonSerializer<YourClass> { @Override public void serialize(YourClass value, JsonGenerator gen, SerializerProvider serializers) throws IOException { // 自定义序列化逻辑 gen.writeString(value.toString()); } } // 自定义反序列化器 public class CustomDeserializer extends JsonDeserializer<YourClass> { @Override public YourClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { // 自定义反序列化逻辑 String value = p.getValueAsString(); return new YourClass(value); } } // 在需要进行自定义序列化和反序列化的字段上使用注解 public class YourClass { @JsonSerialize(using = CustomSerializer.class) private String field1; @JsonDeserialize(using = CustomDeserializer.class) private String field2; // 省略其他代码 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值