Java如何优雅的使用fastjson2进行枚举序列化/反序列化,欢迎探讨

java 复制代码
// 枚举接口
import com.alibaba.fastjson2.annotation.JSONField;
import java.io.Serializable;
import lombok.NonNull;

public interface BaseEnum<T extends Serializable> {
    @JSONField(value=true)  // 关键注解,使value字段主导序列化/反序列化
    @NonNull T getValue();
    @NonNull String getDescription();
}
java 复制代码
// 枚举
import com.baomidou.mybatisplus.annotation.EnumValue;

@Getter
@RequiredArgsConstructor
public enum EnumsTest implements BaseEnum<Integer> {
    NO(0, "哒咩!"),
    YES(1, "古德!"),
    ;
    
    @EnumValue  // 题外话,这个注解可以实现mybatis-plus读写数据库时的序列化/反序列化,可以用在Entity类中的字段
    private final Integer value;  // 实际序列化/反序列化的字段
    private final String description;  // 枚举简介/名称
}
java 复制代码
// 测试类
public class Bean1 {
	@NonNull
    public EnumsTest type;
}

@Test
public void test1() {
    Bean1 bean = new Bean1();
    bean.type = EnumsTest.NO;
    
    // 序列化
    String str = JSON.toJSONString(bean);
    assertEquals("{\"type\":0}", str);

	// 反序列化
    Bean1 bean1 = JSON.parseObject(str, Bean1.class);
    assertEquals(bean.type, bean1.type);
	
	// 为null的反序列化, @NonNull会抛出异常
	JSONObject jsonObj = JSONObject.parseObject(str);
	jsonObject.put("type", null);
	jsonObject.toJavaObject(Bean1.class);  // Caused by: java.lang.NullPointerException: type is marked non-null but is null

	// 枚举不存在的反序列化,抛出JSONException异常
	jsonObject.put("type", 777);
	jsonObject.toJavaObject(Bean1.class);  // Exception in thread "main" com.alibaba.fastjson2.JSONException: None enum ordinal or value 777
}
  • 欢迎大家来探讨,更好的方法,或者能优化的地方
相关推荐
傅科摆 _ py18 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
kiracrimson18 小时前
栈与队列容器:适配器、deque 与 priority_queue
开发语言·c++·适配器模式
北冥you鱼18 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
Lichee2018 小时前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试
YDS82918 小时前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
Shaoshing18 小时前
LeetCode100 42.接雨水
java·算法·leetcode
枫子有风18 小时前
卡码网盘项目深挖
java·redis·jwt·es·pgvector
郭小李18 小时前
springmvc 拦截器
java·开发语言·前端
web打印社区18 小时前
Chrome-kiosk-printing能上生产吗
开发语言·前端·javascript·chrome·websocket
大风起兮云飞扬丶18 小时前
Java——日期类
java·开发语言