java 使用Spring将JSON绑定到POJO是否比使用ObjectMapper手动解析更有效?

ffscu2ro  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(200)

让spring将JSON对象绑定到自定义Pojos与将响应作为JSON字符串检索并使用ObjectMapper进行解析有什么区别?
我们有一些调用API的遗留代码,并以JSON字符串的形式获得响应。然后代码将数据解析为新的POJO对象。
我一直在努力改进这方面的代码,并添加了一些新的函数,但我遵循了遗留代码,以重用旧的助手函数,使事情保持一致。
然而,当我提交它进行审查时,我的主管问我是否可以跳过手动解析,并将JSON反序列化为POJO对象。他说:“如果你能……那就更好了。”
我完成了这个,但我从来没有听说过为什么这比使用对象Map器“更好”。下面是一个例子:(大概是这样的,不精确,只是基于记忆

  • 遗留代码:
String response = someCall();

Try {
  SomePojo object = ObjectMapper.parse(response ,SomePojo.class)
  // Some helpers that extract a list of data from this object, error catching etc.
  List<SomeData> data = object.getData().stream(//helpers to map etc);
  return data;
}
  • 那么新版本是:
try {
 SomePojo object = someCall()
 return object.getData()
}

从我所阅读到的内容来看,这个方法仍然使用相同的Jackson对象Map器进行解析,并且它使用POJO对象的getter和setter。
除了它看起来更干净之外,我真的不知道为什么这是一个更好的方法。
有什么想法吗

ttp71kqs

ttp71kqs1#

据我所知,你说的是spring web特性,以透明的方式从payload中传递对象,对吗?
如果是,那么关键的好处是序列化/反序列化代码对您不可见。
另一方面,如果你不确定payload的形状,那么它可能会很麻烦,因为spring会将其转换为Exceptions/BAD_REQUESTS,甚至在它进入你的代码之前就会发生。
在大多数情况下,这是可以的,因为有效载荷是已知的。除此之外,这只是一个问题,继续做自己的解析或让框架为您做的工作。

njthzxwz

njthzxwz2#

Spring在幕后使用Json-Jackson库(ObjectMapper类)在POJO和JSON之间编组数据。这可以配置,以便您可以告诉Spring使用任何其他库,但默认情况下它使用Jackson。所以,让Spring来做转换比你自己做更干净。至于效率,无论哪种方式,您都不会得到太多的好处,但是如果您可以让Spring做这件事,它会更干净,而且做得更均匀。所以,除非您对POJO转换有特殊的要求,而Spring又不提供这种转换,否则我会站在您的经理一边,说让Spring来做吧。

相关问题