枚举类 json格式 的正反转化

本文探讨了Java枚举类与JSON之间的转换问题。当使用@JsonValue注解时,会影响枚举对象转JSON的结果。默认情况下,枚举名字会被转换;若注解在integer字段上,会导致数字类型的值被当作索引转换,可能引发错误。解决方法是将integer字段改为string,确保枚举值与索引对应。此外,文章还提醒了注意事项,如保持枚举值的顺序与索引一致。
摘要由CSDN通过智能技术生成

枚举类 json格式 的正反转化

例如有以下枚举:

@AllArgsConstructor //lombok的有参构造注解
public enum TestEnum {
    AAA(0,"AAAa"),
    BBB(1,"BBBb"),
    CCC(2,"CCCc"),
    DDD(4,"DDDd");
    
    @JsonValue
    private Integer id;
    private String name;
}
  1. 默认不加 @JsonValue 注解时,以枚举对象的名字转json

AAA(0,“AAAa”), 转json后 “AAA”

  1. 给某个字段加@JsonValue注解时,如给name字段加@JsonValue注解

AAA(0,“AAAa”), 转json后 “AAAa”

  • 但是 如果这个字段是integer类型的,如给Integer id字段加@JsonValue注解

DDD(4,“DDDd”), 转json后 4 (注意我的4 没有带引号 这个4是数字类型)

数字类型的4反转枚举类时,会把4当做索引去找枚举对象
四个枚举对象索引为[0,1,2,3] 数字类型4反转时会报错

解决办法:

  1. 将 Integer id 改为 String id 这样最好
  2. 保证每个枚举对象 integer id 的值 和索引值对应(自上而下 从0开始) 这样很局限
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值