java - 执行使用 RestTemplate 返回列表的 POST 请求时出错
问题描述
我创建了一个 Mock 服务来模拟 POST 请求,其主体如下:
{
"DOSID": "DP02213",
"RegionsID": "31",
"DistrictsID": "88",
"ApprovalDate": "09/10/2020",
"ExpiryDate": "15/10/2020",
"ItemsList": [
{
"Itemlookupcode": "1SBRJUOR00CJ3050H001",
"Quantity": "1"
}
]
}
它的响应如下:
{
"DeliveryDateList": [
"2020-10-22T00:00:00+02:00",
"2020-10-24T00:00:00+02:00"
]
}
下面的屏幕截图描述了模拟服务:
我为请求和响应创建了一个 java 类,然后我创建了这个 java 类:
public class GetProposedDateRestClient {
private Logger logger = Logger.getLogger(getClass().getName());
@Autowired
public List<GetProposedDateResponseHeader> getProposedDate(GetProposedDateRequestHeader requestHeader) {
String theUrl = "https://2760f38d-a7a0-4a9b-aee6-3cd331e0c8fc.mock.pstmn.io/GetProposedDates";
RestTemplate restTemplate = new RestTemplate();
List<GetProposedDateResponseHeader> result = null;
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<GetProposedDateRequestHeader> entity = new HttpEntity<GetProposedDateRequestHeader>(
requestHeader, headers);
try {
ResponseEntity<List<GetProposedDateResponseHeader>> responseEntity = restTemplate.exchange(theUrl, HttpMethod.POST,
entity, new ParameterizedTypeReference<List<GetProposedDateResponseHeader>>() {} );
result = responseEntity.getBody();
}
catch(Exception e) {
e.getMessage();
}
return result;
}
}
最后我得到了这个错误:
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
at [Source: java.io.PushbackInputStream@29eb092b; line: 1, column: 1]
解决方案
您的响应是 JsonObject 而不是 JsonArray。而不是 List<GetProposedDateResponseHeader> result = responseEntity.getBody();
,试一试。
GetProposedDateResponseHeader result = responseEntity.getBody();
推荐阅读
- c# - EF Core - 按类别名称过滤列表 - 忽略大小写
- c# - 用户关闭时 UWP 重新启动
- bash - 在 entrypoint.sh 中运行 docker 命令时找不到 docker
- file - Serilog - 无法打开文件 - 另一个进程使用的文件错误
- dart - dart - `this` 是否取决于调用点
- javascript - 尝试使用 AJAX 从公共目录中选择随机图像
- kubernetes - 使用 Ghost docker 镜像和 Kubernetes 时如何增加最大文件大小
- postgresql - Postgres 选择查询在使用 JDBC 时运行缓慢,但在从同一服务器在 PSQL 中运行时快速
- node.js - 解构 Sequelize 查询
- reactjs - GITLAB CI - React 应用程序构建失败但工作成功