首页 > 解决方案 > 执行使用 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]

标签: javaspringresttemplate

解决方案


您的响应是 JsonObject 而不是 JsonArray。而不是 List<GetProposedDateResponseHeader> result = responseEntity.getBody();,试一试。 GetProposedDateResponseHeader result = responseEntity.getBody();


推荐阅读