读取包含包含单个元素的列表的数据时,restTemplate.getForEntity给出异常

时间:2019-03-13 02:14:42

标签: java spring jackson resttemplate

我有一个Detail对象,该对象具有Product类型的对象的属性。产品具有名为xxx的属性,该属性是一个数组列表。我使用邮递员在URL上执行GET,结果如下:

"Product": {
    "id": "2",
    "xxx": [
        "price": "50"
      },
      {
        "price": "60"
      }
    ]
  }

这个结果很好。但是,在我的Spring项目中,当我进行一次使用RestTemplate的获取时:

  restTemplate.getForEntity("someurl", Detail.class).getBody();

当xxx列表包含2个或更多元素时,我得到正确的结果。   但是,当此列表中只有元素时,会出现错误:

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

  How do I fix this issue that I am facing with my call to restTemplate.getForEntity as above?

1 个答案:

答案 0 :(得分:0)

我怀疑您不是在列表包含一个项目时遇到此错误,而是在除了简单对象之外根本没有列表时遇到了此错误,因此解析器抱怨放置了var input = "Longines, retailed by Barth, Zurich, ref. 22127, movement no. 5770083"; var output = input.match(/(?<=movement no. )\d+/) 令牌不正确。 为了解决这个问题,而又无法编辑Swagger生成的域类,您可以设置反序列化功能

START_OBJECT

直接在您使用的ObjectMapper objectMapper = new ObjectMapper(); // maybe injected objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); 上。

现在可以将此对象映射器放入ObjectMapper配置中:

RestTemplate

如果您使用Spring方式,请记住您也可以注入所有这些bean,它们是在此处直接创建的,只是将它们更好地展示在一起。

您还可以查看以下运行示例: