[英]Enums for Jackson's @JsonProperty
假設我有一個枚舉:
public enum ParameterList {
FREQUENCY_ID("500");
...
lot's of different constants here
...
private final String param;
ParameterList(String param) {
this.param = param;
}
@Override
public String toString() {
return param;
}
}
假設我有一個具有字段的DTO:
private String frequency;
假設我有一個JSON
:
{"500" : "100Hz"}
我想將此json
映射到我的dto
,因此DTO.frequency
將具有json的"500"
字段(即"100Hz"
)的值。
我知道只能將常量用作屬性值,但是有一些解決方法可以使以下工作正常進行?
@JsonProperty(ParameterList.FREQUENCY_ID)
private String frequency;
( @JsonProperty
是com.fasterxml.jackson.annotation.JsonProperty
,版本2.8.0)
這個想法是當枚舉ParameterList.FREQUENCY_ID
從"500"
更改為其他值時,最小化代碼編輯。
您可以嘗試以下方法:
public enum ParameterList {
FREQUENCY_ID(Constants.FREQUENCY_ID_VALUE);
private final String value;
ParameterList(String value) {
this.value= value;
}
@Override
public String toString() {
return value;
}
public static class Constants {
public static final String FREQUENCY_ID_VALUE = "500";
}
}
然后使用:
@JsonProperty(ParameterList.Constants.FREQUENCY_ID_VALUE)
private String frequency;
對於{"admin": "superuser"}
例如{"role": "superuser"}
(或userType而不是role),它會更加清晰,因此json有點怪異。 但是,要將值映射到枚舉,您要做的就是在DTO中指定它。 對於您的json和一個枚舉,還包含一個superuser
作為值
public enum UserType {
ADMIN, SUPERUSER
....
}
您要做的就是使您的DTO具有枚舉類型
private UserType admin; // <-- admin because that's your key's name (maybe change that)
請注意,您也可以使用
@JsonProperty("admin") private UserType userType; // or whatever name you like
或類似的內容(如果您無法更改json)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.