我知道类似的帖子,我检查了它们,但是没有它们可以帮助我。
我想POST到需要三个参数和基本身份验证的API(管理示例任务)。 邮差是有效的。我提供的身体像:
{
"title": "foo",
"description": "bar",
"completed": "false"
}
并设置基本身份验证(使用用户名和密码)。 API会发送如下响应:
{
"id": 0001
}
如果我向api发送POST,一切正常,但现在我想在java中实现它。如果我尝试发送POST,我收到400错误请求:HttpClientErrorException:400 Bad Request(DefaultResponseErrorHandler)。 Task和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 :(得分:0)
我发现,这个实现很好。它接受String作为响应类型。还有另一个问题,但与此背景无关。