Мне известны аналогичные сообщения, и я проверил их, но не они могли мне помочь.RestTemplate POST - ответ на дескриптор
Я хочу отправить POST в API (который управляет примерами задач), который требует трех параметров и базового auth. В почтальоне это работает. Я предоставляю тело, как:
{
"title": "foo",
"description": "bar",
"completed": "false"
}
и установить базовое auth (с именем пользователя и паролем). API посылает ответ, как это:
{
"id": 0001
}
Все работает отлично, если я отправить POST к API, но теперь я хочу, чтобы реализовать его в Java. Я получаю запрос 400, если я пытаюсь отправить POST: HttpClientErrorException: 400 Bad Request (DefaultResponseErrorHandler). Задача и TaskResponse - это pojo с полями, как в запросе и ответе, и конструктором no-arg/full-arg, getter и setter.
Task task = new Task("foo", "bar", false);
RestTemplate template = new RestTemplate();
HttpEntity<Task> httpEntity = new HttpEntity<>(task, createHttpHeader());
ResponseEntity<TaskResponse> result = template.exchange(uri, HttpMethod.POST, httpEntity, TaskResponse.class);
private HttpHeaders createHttpHeader() {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
requestHeaders.set("Authorization", createBasicAuthHeaderValue(username, password));
return requestHeaders;
}
private String createBasicAuthHeaderValue(String username, String password) {
String credentials = username + ":" + password;
byte[] base64Credentials = Base64.encodeBase64(credentials.getBytes());
return "Basic " + Arrays.toString(base64Credentials);
}
Я пробовал разные вещи, но я ничего не работаю для меня. С моей точки зрения, проблема заключается в том, как реагировать на ответ, потому что это, например, не запрос, который возвращается в ответ. Это нечто совершенно другое. В этом примере id созданной задачи. Я попытался использовать String.class в качестве типа ответа, но он не работает. – pas2al
Включили ли вы Jackson в путь класса, и вы можете включить режим трассировки и проверить, имеет ли тело запроса правильное представление Json. – Bhokal
@Bhokal Что такое Джексон? Мне интересно ... потому что ответ - это просто JSON. Должен ли String.class работать для меня? – pas2al