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
我正在使用 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
.