Resttemplate-请求pojo本身或请求json字符串并进行解析

时间:2018-11-16 17:07:05

标签: java json rest

我有两个选择:

请求对象

restTemplate.exchange(url, HttpMethod.GET, entity, Object.class);

或请求JSON

restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

然后解析它。

幕后两个都将使用JSON,但是有没有约定或最佳实践?

2 个答案:

答案 0 :(得分:1)

您可以为相应的json创建java对象,然后响应将自动序列化:

restTemplate.exchange(url, HttpMethod.GET, entity, MyResponseBean.class);

对于Java bean的生成,jsonschema2pojo很有用。

答案 1 :(得分:1)

我认为至少有两个原因更愿意RestTemplate为您解组对象而不是首先检索String

  1. 这可能会提高内存效率;但更重要的是
  2. 它导致代码更干净!

如果直接检索String,则必须先将整个结果读入内存,然后然后将其解析为对象模型。 RestTemplate中的消息转换器有机会从响应InputStream中逐字节地将其读入对象模型。当然,如果不将整个响应加载到内存中,他们可能无法构建对象图,但是至少通过这种方式,您不必执行两次。

但是更重要的是...当Spring具有经过战斗力,无限可配置的代码来为您执行此操作时,您为什么要自己这样做?

说,每当您从RestTemplate获得JSON响应时,您就自己处理:

MyThing thing = objectMapper.readValue(stringResult, MyThing.class);

...那一行甚至都不值得保存吗?与此相关,我认为JSON umarshalling本质上是一个跨领域的关注点,需要集中配置才有意义。