当我们使用的对象里有枚举类型的字段,我们可能需要的是枚举中不同的属性。
比如,在进行JSON序列化的时候,我们可能需要枚举中的不同属性。
-
使用枚举字段的下标,编号。
{"payStatus":"2"}
-
使用字段的Name值
{"payStatus":"SUCCESS"}
-
使用字段的toString方法
{"payStatus":"支付成功"}
下面这个枚举。
public enum PayStatus {
/** 未开始支付 - 0 */
INIT{
@Override
public String toString() {
return "未开始支付";
}
},
/** 用户输入密码 - 1 */
USERPAYING{
@Override
public String toString() {
return "用户输入密码";
}
},
/** 支付成功 - 2 */
SUCCESS{
@Override
public String toString() {
return "支付成功";
}
}
;
}
实体类
public class TestModel {
@Enumerated(value=EnumType.ORDINAL)
private PayStatus payStatus;
public PayStatus getPayStatus() {
return payStatus;
}
public void setPayStatus(PayStatus payStatus) {
this.payStatus = payStatus;
}
}
具体的实现,我们来倒着说
-
第三种,使用字段的toString方法
直接在实体类上,说明解析的时候使用toString方法
@Enumerated(value=EnumType.ORDINAL) @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString) private PayStatus payStatus;
-
第二种,使用字段的Name值
这种的默认就序列化为使用name值,也就是 INIT 、 USERPAYING 、SUCCESS
这个也可以主动标识一下,如下
@Enumerated(value=EnumType.ORDINAL) @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingName) private PayStatus payStatus;
-
第一种,直接使用序号。
当我们这个字段不需要解析成枚举中的值,也就是想直接读取数据库中存的数字。
但是试了多个方法都没在字段上直接加注解实现,看了官方文档的说明,可以在json序列化的时候,全局的使用这种方法。
这样使用后,不跟注解的说明冲突,可以混合使用。
int features= SerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteEnumUsingName, false); return JSON.toJSONString(object,features, SerializerFeature.EMPTY);