【发布时间】:2016-07-15 02:42:47
【问题描述】:
我知道类似的帖子,我检查了它们,但没有一个可以帮助我。
我想发布到需要三个参数和一个基本身份验证的 API(管理示例任务)。 在邮递员中它可以工作。我提供这样的身体:
{
"title": "foo",
"description": "bar",
"completed": "false"
}
并设置基本身份验证(使用用户名和密码)。 API 发送如下响应:
{
"id": 0001
}
如果我向 api 发送 POST,一切正常,但现在我想在 java 中实现它。如果我尝试发送 POST,则会收到 400 错误请求:HttpClientErrorException: 400 Bad Request (DefaultResponseErrorHandler)。 Task 和 TaskResponse 是 pojo 的,具有请求和响应中的字段以及无参数/全参数构造函数、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);
}
【问题讨论】:
-
我尝试了不同的方法,但对我没有任何帮助。从我的角度来看,问题是如何对响应做出反应,因为例如不是请求作为响应返回。这是完全不同的东西。在此示例中,创建任务的 id。我尝试使用 String.class 作为响应类型,但它不起作用。
-
您是否将 Jackson 包含在类路径中,您可以启用跟踪模式并验证请求正文是否具有正确的 Json 表示。
-
@Bhokal 杰克逊是干什么用的?我想知道......因为响应只是一个 JSON。 String.class 不应该为我工作吗?
-
我启用了跟踪模式,它的前面有类名。那是对的吗?通常它只是大括号和字段的原因。
Writing [Task{title='foo', description='bar', completed='false'}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@5a12c728]
标签: java spring post resttemplate basic-authentication