如果我尝试反序列化以下存储为字符串的类型:
List<Entry<String, String>> entryList;
其中entryList包含:
[{"dummyKey1":"dummyValue1"}]
我收到以下错误
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.util.Map$Entry, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information.
在 junit 中运行测试用例时出现上述错误,但如果删除测试用例,则部署后一切运行正常:
由于 Entry 中缺少 NoArgsConstructor,运行 junit 测试用例时出现上述错误。因此,我使用 NoArgsConstructor 创建了一个 DummyEntry,它以 null 参数调用 Entry。
DummyEntry<K, V> extends SimpleEntry<K, V>
进行此更改后,没有出现上述错误,但在部署更改后我开始出现以下错误。
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "dummyKey1", not marked as ignorable (2 known properties: "value", "key"]).
一种方法不适用于 junit,但在生产中有效,而其他方法在 junit 中有效但在生产中无效,原因是什么。
另外,我注意到另一件事:在生产中,Map.Entry 被序列化为
{'dummyKey1':'dummyValue1'}
而 junit 中的测试用例序列化相同的字符串
{'key':'dummyKey1', 'value':'dummyValue1'}
这种奇怪行为的原因是什么?我怎样才能让这件事对双方都有效?