假设我有一个枚举:
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"
更改为其他值时最小化代码编辑。
答案 0 :(得分:4)
您可以尝试以下方法:
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;
答案 1 :(得分:2)
json有点奇怪,{"admin": "superuser"}
如果像{"role": "superuser"}
(或userType而不是role)那样会更清楚。但是,要将值映射到枚举,您所要做的就是在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。