杰克逊未正确反序列化SetValuedMap

时间:2019-06-25 06:54:07

标签: java spring-boot jackson apache-commons

我正在使用private string RunProcess(string command, string args) { StringBuilder sb = new StringBuilder(); Process p = new Process(); p.StartInfo.FileName = command; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.Arguments = args; p.OutputDataReceived += (sender, eventArgs) => { sb.Append(eventArgs.Data); }; p.Start(); p.WaitForExit(); return sb.ToString(); } 。在调试我的设备时,我得到了正确的结果,但以下是控制器返回的结果。好像Jackson不能反序列化SetValuedMap。

Map<String, SetValuedMap<String, CustomerDomain>>

1 个答案:

答案 0 :(得分:1)

这是因为诸如Map之类的数据结构在反序列化时需要一些特殊的逻辑,并且任何将POJO转换为JSON的库都对扩展Map接口的对象进行了某些处理。

SetValuedMap也需要进行此处理,因为不能从字段等中直接读取值,而是使用put(..)get(..)方法(与{{1 }}。

但是:Map没有实现SetValuedMap接口。例如,它在Map方法返回值类型上有所不同,因此,它们在这种意义上是“不兼容的”。它是来自Apache公用程序的实用程序类,而不是“标准Java”。

因此,杰克逊可能不知道如何反序列化此类。您可能需要编写自定义的反序列化器,例如-put()