我有一个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?
答案 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,它们是在此处直接创建的,只是将它们更好地展示在一起。
您还可以查看以下运行示例: