我正在尝试使用 Jackson ObjectMapper.readValue(String,Class) API 将字符串映射到枚举对象,问题是让我们说我的 json 字符串包含一个带有操作枚举的任务对象,如下所示
公共(public)枚举操作{
@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) 因为它无法转换此枚举。
我尝试添加自定义反序列化器,但 EnumDeserializer 无论如何都会被调用。有什么想法吗?
所有对象都是 JAXB 生成的,因此不可能进行注释。
感谢您的帮助
最佳答案
你尝试过吗:
new ObjectMapper().setAnnotationIntrospector(new JaxbAnnotationIntrospector()).readValue()
关于java - jackson-mapper 版本 1.9.12 EnumDeserializer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090527/