枚举类 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;
}
- 默认不加 @JsonValue 注解时,以枚举对象的名字转json
AAA(0,“AAAa”), 转json后 “AAA”
- 给某个字段加@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反转时会报错
解决办法:
- 将 Integer id 改为 String id 这样最好
- 保证每个枚举对象 integer id 的值 和索引值对应(自上而下 从0开始) 这样很局限

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





