當(dāng)我們使用的對(duì)象里有枚舉類(lèi)型的字段凤跑,我們可能需要的是枚舉中不同的屬性爆安。
比如,在進(jìn)行JSON序列化的時(shí)候饶火,我們可能需要枚舉中的不同屬性鹏控。
-
使用枚舉字段的下標(biāo),編號(hào)肤寝。
{"payStatus":"2"}
-
使用字段的Name值
{"payStatus":"SUCCESS"}
-
使用字段的toString方法
{"payStatus":"支付成功"}
下面這個(gè)枚舉当辐。
public enum PayStatus {
/** 未開(kāi)始支付 - 0 */
INIT{
@Override
public String toString() {
return "未開(kāi)始支付";
}
},
/** 用戶(hù)輸入密碼 - 1 */
USERPAYING{
@Override
public String toString() {
return "用戶(hù)輸入密碼";
}
},
/** 支付成功 - 2 */
SUCCESS{
@Override
public String toString() {
return "支付成功";
}
}
;
}
實(shí)體類(lèi)
public class TestModel {
@Enumerated(value=EnumType.ORDINAL)
private PayStatus payStatus;
public PayStatus getPayStatus() {
return payStatus;
}
public void setPayStatus(PayStatus payStatus) {
this.payStatus = payStatus;
}
}
具體的實(shí)現(xiàn),我們來(lái)倒著說(shuō)
-
第三種鲤看,使用字段的toString方法
直接在實(shí)體類(lèi)上缘揪,說(shuō)明解析的時(shí)候使用toString方法
@Enumerated(value=EnumType.ORDINAL) @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString) private PayStatus payStatus;
-
第二種,使用字段的Name值
這種的默認(rèn)就序列化為使用name值义桂,也就是 INIT 找筝、 USERPAYING 、SUCCESS
這個(gè)也可以主動(dòng)標(biāo)識(shí)一下慷吊,如下
@Enumerated(value=EnumType.ORDINAL) @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingName) private PayStatus payStatus;
-
第一種袖裕,直接使用序號(hào)。
? 當(dāng)我們這個(gè)字段不需要解析成枚舉中的值溉瓶,也就是想直接讀取數(shù)據(jù)庫(kù)中存的數(shù)字急鳄。
? 但是試了多個(gè)方法都沒(méi)在字段上直接加注解實(shí)現(xiàn)谤民,看了官方文檔的說(shuō)明,可以在json序列化的時(shí)候疾宏,全局的使用這種方法张足。
? 這樣使用后,不跟注解的說(shuō)明沖突坎藐,可以混合使用为牍。
int features= SerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteEnumUsingName, false); return JSON.toJSONString(object,features, SerializerFeature.EMPTY);