【发布时间】:2013-05-08 17:20:48
【问题描述】:
我有一个类似的 JSON 对象:
{"name":"John", "grade":"A"}
或
{"name":"Mike", "grade":"B"}
或
{"name":"Simon", "grade":"C"}
等
我正在尝试将上面的 JSON 映射到:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Employee{
@JsonIgnoreProperties(ignoreUnknown = true)
public enum Grade{ A, B, C }
Grade grade;
String name;
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
上述映射工作正常,但将来会有更多“等级”类型,比如 D、E 等,这会破坏现有映射并引发以下异常
05-08 09:56:28.130: W/System.err(21309): org.codehaus.jackson.map.JsonMappingException: Can not construct instance of Employee from String value 'D': value not one of declared Enum instance names
有没有办法忽略枚举类型中的未知字段?
谢谢
【问题讨论】:
-
注解
@JsonIgnoreProperties不能按照您对Enum类型的预期方式工作;它仅(当前)允许忽略未知的 POJO 属性。但我认为这是一个有意义的改进想法。那么您可以在Jackson databind 项目中提交问题吗?如果是这样,也许它可以添加到 Jackson 2.3 中? -
答案有点冗长。对于那些寻求最快和最简单解决方案的人:将
READ_UNKNOWN_ENUM_VALUES_AS_NULLdeserialization feature 设置为 true。 -
mapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL);