SetValuedMap 未被 Jackson 正确反序列化

SetValuedMap not deserialised correctly by Jackson

我正在使用 Map<String, SetValuedMap<String, CustomerDomain>>。我在调试时得到了正确的结果,但以下是我的控制器返回的结果。似乎杰克逊无法反序列化 SetValuedMap。

{
   "first": {
      empty:false
   },
   "second": {
      empty:false
   }
}

这是因为像 Map 这样的数据结构在 de/serialized 时需要一些特殊的逻辑,并且任何将 POJO 转换为 JSON 的库都对扩展 [=10] 的对象有一些自己的处理=] 接口.

SetValuedMap 也需要这种处理,因为这些值不能直接从字段中读取,而是使用 put(..)get(..) 方法(与在 Map).

但是:SetValuedMap 没有实现 Map 接口。它在例如 put() 方法 return 值类型方面有所不同,因此在这个意义上它们是 "incompatible"。它是来自 Apache commons 而不是 "standard Java" 的实用程序 class。

因此 Jackson 可能不知道如何反序列化这个 class。您可能需要为 - 例如 - MultiValuedMap.

编写自定义 de/serializer