-1

我已将@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:方法'addProperty()'上的'any-setter'注释无效:第一个参数不是String或Object类型,而是java.lang.Enum

如果我使用 String 类型的键将映射更改为简单的 HashMap,那么它可以正常工作。

有人可以让我知道反序列化到 EnumMap 需要做什么吗

4

2 回答 2

1

该文件指出:

第一个参数是属性的名称,所以它必须是字符串。

您可以在 set 方法中将其转换为 Enum。

于 2020-01-19T04:48:00.527 回答
1

@JsonAnySetter注释似乎只适用于orStringObject类型。

我找到的解决方法是重载addProperty键类型为String的方法,然后将String键转换为Enum类型,并addProperty使用Enum键调用方法。

在重载方法上使用@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方法。

于 2020-01-19T05:35:01.790 回答