POST JSON Object через RestTemplate вызывает Response 400 BAD_REQUEST - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь отправить POST-запрос с данными JSON в какой-то Swagger API, но это вызывает ошибку: {"error":{"message":"Invalid json message received","status":400}}

Вот код:

RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
messageConverters.add(converter);
restTemplate.setMessageConverters(messageConverters);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

String date = "05/13/2019";

JSONObject jsonObject = new JSONObject();
jsonObject.put("startDate", date);
jsonObject.put("endDate", date);

HttpEntity<String> entity = new HttpEntity<>(jsonObject.toString(),headers);

String url = "https://api/reports/";

ResponseEntity<List> response = restTemplate.postForEntity(url,entity,List.class);

Пружинный бревно:

o.s.web.client.RestTemplate : HTTP POST https://api/reports/
o.s.web.client.RestTemplate : Accept=[application/json]
o.s.web.client.RestTemplate : Writing [{"endDate":"05/13/2019","startDate":"05/13/2019"}] as "application/json"
o.s.web.client.RestTemplate : Response 400 BAD_REQUEST
c.s.my.controller.ApiClient : Error.Body: {"error":{"message":"Invalid json message received","status":400}}
c.s.my.controller.ApiClient : Error.Headers: [Date:"Fri, 17 May 2019 07:18:03 GMT", Content-Type:"application/json", Transfer-Encoding:"chunked", Connection:"keep-alive", Server:"nginx", X-Powered-By:"PHP/5.6.32", Cache-Control:"no-cache"]

Но когда я отправляю запрос через curl:

curl -X POST "https://api/reports/" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"endDate\":\"05/13/2019\",\"startDate\":\"05/13/2019\"}"

Работает отлично!

Когда я пытаюсь отправить JSONObject, как:

HttpEntity<JSONObject> entity = new HttpEntity<>(jsonObject,headers);

Есть еще одна ошибка: Response 422 UNPROCESSABLE_ENTITY с телом ответа:

{"errors":{"list":{"report_campaign_single_form":["This form should not contain extra fields.: empty"],"startDate":["This value should not be blank."],"endDate":["This value should not be blank."]},"status":422}}

Что я делаю не так? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 17 мая 2019

После проверки запроса с помощью CharlesProxy я нашел ответ!

Когда я передаю jsonObject как String:

HttpEntity<String> entity = new HttpEntity<>(jsonObject.toString(),headers);

Запрос выглядит так:

"{\"endDate\":\"05/13/2019\",\"startDate\":\"05/13/2019\"}"

Как мы видим, это неверные данные JSON, тогда я передаю jsonObject как Map:

HttpEntity<Map> entity = new HttpEntity<>(jsonObject.toMap(),headers);

, и он отлично работает:

{
    "endDate": "05/13/2019",
    "startDate": "05/13/2019"
}

Приносит мне 200 OKответ

...