【发布时间】:2013-04-12 00:21:36
【问题描述】:
我正在尝试使用 Jackson ObjectMapper.readValue(String,Class) API 将字符串映射到枚举对象,问题是让我们说我的 json 字符串包含一个具有如下操作枚举的任务对象
公共枚举操作{
@XmlEnumValue("Add")
ADD("Add"),
@XmlEnumValue("Amend")
AMEND("Amend"),
@XmlEnumValue("Delete")
DELETE("Delete"),
@XmlEnumValue("Pending")
PENDING("Pending");
private final String value;
Action(String v) {
value = v;
}
public String value() {
return value;
}
public static Action fromValue(String v) {
for (Action c: Action.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
并且 jason 字符串会像这样 "{"action":"Add"}" 然后 ObjectMapper.readValue(jsonString, Task.Class) 抛出
org.codehaus.jackson.map.deser.StdDeserializationContext.weirdStringException(StdDeserializationContext.java:243) 用于 Action Add,因为它无法转换此 Enum。
我尝试添加自定义 Desiserializer,但无论如何都会调用 EnumDeserializer。有什么想法吗?
所有对象都是 JAXB 生成的,因此无法进行注释。
感谢您的帮助
【问题讨论】:
标签: java javascript json spring-mvc jackson