ref:https://www.cnblogs.com/kelelipeng/p/13972138.html
前言
很多人给枚举定义一个私有的属性,序列化为JSON时,希望以这个属性值作为枚举对象的序列化结果。
但是如果对枚举类型不做任何处理的化,不管是FastJson 还是Jackson,默认的序列化结果都是 枚举名称。
如下:
OK(1,“ok_val”),
ERROR(2,“error_val”);
默认的序列化结果是将枚举名称 OK、ERROR 作为value。
同时,Jackson和FastJson是两种不同的Json序列化方案。因此,如果你给属性添加了Jackson的注解
@JsonValue
,但是在转化时,又使用的是FastJson的API去进行Json序列化,那么是没有效果的。
【注意】:Jackson的注解
@JsonValue
,不仅可以用在枚举类中 ,也可以用在普通的pojo类中,都可以将属性 作为对象的序列化value
1、想将Enum中的属性作为 Json序列化的value
json序列化时 希望将枚举对象中的一个属性作为序列化的结果 来响应给前端,这时候的处理方案是:
**方案一:使用Jackson的一个注解:@JsonValue **
只需要 在get方法上/ 属性上
添加 @JsonValue
即可。
【注意】:这个注解是jackson提供的的注解。@ResponseBody
默认使用的也是这种序列化方法。如果想使用FastJson的来处理的化,请移步: https://blog.csdn.net/csdn_0xFFFF/article/details/116675644
public enum StatusEnum {
OK(1,"ok_val"),
ERROR(2,"error_val"),
WARN(3,"warn_val"),
UNKNOWN(4,"unknown_val");
// 位置1
@JsonValue
private String status;
private Integer number;
StatusEnum(Integer number,String status) {
this.status = status;
this.number = number;
}
// 位置2
//@JsonValue
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
}
2、想将Enum中的属性存储到 数据库中
可以使用MybatisPlus的注解: @EnumValue
3、使用举例
如下注解的意思就是:
- 就是将type属性响应给前端;
- 数据库中存储的也是Type属性。