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 类型。还有一个问题,但与此上下文无关。
我知道类似的帖子并且我检查了它们,但没有一个可以帮助我。
我想 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 类型。还有一个问题,但与此上下文无关。