RestTemplate POST - 处理响应

时间:2016-03-27 20:19:43

标签: java spring post resttemplate http-basic-authentication

我知道类似的帖子,我检查了它们,但是没有它们可以帮助我。

我想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);
    }

1 个答案:

答案 0 :(得分:0)

我发现,这个实现很好。它接受String作为响应类型。还有另一个问题,但与此背景无关。