使用 jackson 反序列化 EnumMap
Deserializaing EnumMap using jackson
我已将 @JsonAnySetter
注释添加到 addProperty
方法
Map<MyEnum, String> mymap = new EnumMap<>(MyEnum.class);
@JsonAnySetter
public void addProperty(MyEnum key, Object value) {
mymap.put(key, value);
}
但是在反序列化时出现以下错误
com.fasterxml.jackson.databind.JsonMappingException: Invalid
'any-setter' annotation on method 'addProperty()': first argument not
of type String or Object, but java.lang.Enum
如果我将映射更改为具有 String 类型键的简单 HashMap,则它可以正常工作。
有人可以让我知道反序列化为 EnumMap 需要做什么吗
文档指出:
第一个参数是 属性 的名称,因此它必须是字符串。
您可以在您的设置方法中将其转换为枚举。
@JsonAnySetter
注释似乎只适用于 String
或 Object
键类型。
我找到的解决方法是重载addProperty
方法,键类型为String,然后将String键转换为Enum类型,并用Enum键调用addProperty
方法。
在重载方法上使用 @JsonAnySetter
注释。
Map<MyEnum, String> mymap = new EnumMap<>(MyEnum.class);
public void addProperty(MyEnum key, Object value) {
mymap.put(key, value);
}
@JsonAnySetter
private void addProperty(String key, Object value) {
addProperty(MyEnum.valueOf(key), value);
}
请注意,我已经重载了 addProperty
方法 private
,因为我不想公开此方法版本。
@JsonAnySetter
注释似乎适用于 private
方法。
我已将 @JsonAnySetter
注释添加到 addProperty
方法
Map<MyEnum, String> mymap = new EnumMap<>(MyEnum.class);
@JsonAnySetter
public void addProperty(MyEnum key, Object value) {
mymap.put(key, value);
}
但是在反序列化时出现以下错误
com.fasterxml.jackson.databind.JsonMappingException: Invalid 'any-setter' annotation on method 'addProperty()': first argument not of type String or Object, but java.lang.Enum
如果我将映射更改为具有 String 类型键的简单 HashMap,则它可以正常工作。
有人可以让我知道反序列化为 EnumMap 需要做什么吗
文档指出:
第一个参数是 属性 的名称,因此它必须是字符串。
您可以在您的设置方法中将其转换为枚举。
@JsonAnySetter
注释似乎只适用于 String
或 Object
键类型。
我找到的解决方法是重载addProperty
方法,键类型为String,然后将String键转换为Enum类型,并用Enum键调用addProperty
方法。
在重载方法上使用 @JsonAnySetter
注释。
Map<MyEnum, String> mymap = new EnumMap<>(MyEnum.class);
public void addProperty(MyEnum key, Object value) {
mymap.put(key, value);
}
@JsonAnySetter
private void addProperty(String key, Object value) {
addProperty(MyEnum.valueOf(key), value);
}
请注意,我已经重载了 addProperty
方法 private
,因为我不想公开此方法版本。
@JsonAnySetter
注释似乎适用于 private
方法。