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
}
  • 欢迎大家来探讨,更好的方法,或者能优化的地方
相关推荐
小白学大数据5 分钟前
现代Python爬虫开发范式:基于Asyncio的高可用架构实战
开发语言·爬虫·python·架构
渔舟小调15 分钟前
P19 | 前端加密通信层 pikachuNetwork.js 完整实现
开发语言·前端·javascript
不爱吃炸鸡柳17 分钟前
数据结构精讲:树 → 二叉树 → 堆 从入门到实战
开发语言·数据结构
网络安全许木17 分钟前
自学渗透测试第21天(基础命令复盘与DVWA熟悉)
开发语言·网络安全·渗透测试·php
t***54422 分钟前
如何在Dev-C++中使用Clang编译器
开发语言·c++
码界筑梦坊32 分钟前
93-基于Python的中药药材数据可视化分析系统
开发语言·python·信息可视化
Aurorar0rua42 分钟前
CS50 x 2024 Notes C - 05
java·c语言·数据结构
Cosmoshhhyyy1 小时前
《Effective Java》解读第49条:检查参数的有效性
java·开发语言
棋子入局1 小时前
C语言制作消消乐游戏(2)
c语言·开发语言·游戏
布谷歌2 小时前
常见的OOM错误 ( OutOfMemoryError全类型详解)
java·开发语言