RestTemplate POST - 处理响应

RestTemplate POST - handle response

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

我想 POST 到需要三个参数和基本身份验证的 API(管理示例任务)。 在邮递员中它有效。我提供的正文如下:

{
    "title": "foo",
    "description": "bar",
    "completed": "false"
}

并设置基本身份验证(使用用户名和密码)。 API 发送这样的响应:

{
  "id": 0001
}

如果我将 POST 发送到 api,一切正常,但现在我想在 java 中实现它。如果我尝试发送 POST: HttpClientErrorException: 400 Bad Request (DefaultResponseErrorHandler),我会收到 400 错误请求。 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);
    }

我发现,这个实现很好。它接受 String 作为 Response 类型。还有一个问题,但与此上下文无关。