【发布时间】:2012-11-04 14:05:05
【问题描述】:
我正在尝试使用 Jackson 将 JSON 反序列化为 Java POJO。在不泄露机密信息的情况下,以下是 ObjectMapper 反序列化失败时的示例堆栈跟踪:
org.codehaus.jackson.map.JsonMappingException: Can not construct Map key of type com.example.MyEnum from String "coins": not a valid representation: Can not construct Map key of type com.example.MyEnum from String "coins": not one of values for Enum class
我的 JSON 如下所示:
"foo": {
"coins": null,
...
}
我想反序列化的类有这个字段:
private Map<MyEnum, MyPojo> foo;
我的枚举类型如下所示:
public enum MyEnum {
COINS("coins"),
...
}
我确实意识到我正在尝试反序列化一个空值。但我相信这仍然有效:反序列化的结果应该等同于拥有一个带有foo.put(MyEnum.COINS, null) 的 Map,这确实是一条有效的 Java 指令。非常感谢您的帮助,在此先感谢。
【问题讨论】:
-
在你的枚举类中提供一个静态工厂方法,通过字符串构造枚举
-
问题的原因是默认情况下杰克逊使用
enum.name()作为 id - 在这种情况下,名称是“COINS”,而不是小写的“coins”。正如答案所指出的那样,有很多方法可以解决这个问题。
标签: java json serialization jackson jsonserializer