2016-03-27 2 views
0

Мне известны аналогичные сообщения, и я проверил их, но не они могли мне помочь.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); 
    } 
+0

Я пробовал разные вещи, но я ничего не работаю для меня. С моей точки зрения, проблема заключается в том, как реагировать на ответ, потому что это, например, не запрос, который возвращается в ответ. Это нечто совершенно другое. В этом примере id созданной задачи. Я попытался использовать String.class в качестве типа ответа, но он не работает. – pas2al

+0

Включили ли вы Jackson в путь класса, и вы можете включить режим трассировки и проверить, имеет ли тело запроса правильное представление Json. – Bhokal

+0

@Bhokal Что такое Джексон? Мне интересно ... потому что ответ - это просто JSON. Должен ли String.class работать для меня? – pas2al

ответ

0

Я обнаружил, что эта реализация в порядке. Он принимает String как тип ответа. Была и другая проблема, но не связанная с этим контекстом.