當(dāng)我們使用的對象里有枚舉類型的字段,我們可能需要的是枚舉中不同的屬性。
比如,在進(jìn)行JSON序列化的時候,我們可能需要枚舉中的不同屬性。
-
使用枚舉字段的下標(biāo),編號。
{"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;
}
}
具體的實現(xiàn),我們來倒著說
-
第三種,使用字段的toString方法
直接在實體類上,說明解析的時候使用toString方法
@Enumerated(value=EnumType.ORDINAL) @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString) private PayStatus payStatus; -
第二種,使用字段的Name值
這種的默認(rèn)就序列化為使用name值,也就是 INIT 、 USERPAYING 、SUCCESS
這個也可以主動標(biāo)識一下,如下
@Enumerated(value=EnumType.ORDINAL) @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingName) private PayStatus payStatus; -
第一種,直接使用序號。
? 當(dāng)我們這個字段不需要解析成枚舉中的值,也就是想直接讀取數(shù)據(jù)庫中存的數(shù)字。
? 但是試了多個方法都沒在字段上直接加注解實現(xiàn),看了官方文檔的說明,可以在json序列化的時候,全局的使用這種方法。
? 這樣使用后,不跟注解的說明沖突,可以混合使用。
int features= SerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteEnumUsingName, false); return JSON.toJSONString(object,features, SerializerFeature.EMPTY);