我在 REST API 中使用 Jackson + Spring。其中一个 API 调用具有如下所示的 JSON:
{
"status": "Suspended"
}
其中“status”的值映射到 Java 枚举,如下所示:
public enum FeatureStatus {
Activated(0),
Inactivated(1),
Suspended(2),
Deleted(3);
private FeatureStatus(int id) {
this.id = id;
}
private int id;
public int getId() {
return id;
}
public FeatureStatus valueOf(int id) {
switch(id) {
case 1: return Inactivated;
case 2: return Suspended;
case 3: return Deleted;
default: return Activated;
}
}
@JsonCreator
public static FeatureStatus fromValue(String status) {
if(status != null) {
for(FeatureStatus featureStatus : FeatureStatus.values()) {
if(featureStatus.toString().equals(status)) {
return featureStatus;
}
}
throw new IllegalArgumentException(status + " is an invalid value.");
}
throw new IllegalArgumentException("A value was not provided.");
}
}
然而,这个异常被抛出:java.lang.IllegalArgumentException: { is an invalid value.
看起来它根本没有反序列化 JSON。我的控制器方法有这个定义:
public @ResponseBody void updateFeatureStatusById(@PathVariable long featureId, @RequestBody FeatureStatus updated) {
任何其他控制器都会使用这种格式自动反序列化 JSON 格式。如何将此 JSON 反序列化到我的枚举中?