Java RestTemplate后处理响应

Java RestTemplate后处理响应,java,spring,post,resttemplate,basic-authentication,Java,Spring,Post,Resttemplate,Basic Authentication,我知道类似的帖子,我检查过,但没有一个能帮我 我想发布到一个API(用于管理示例任务),它需要三个参数和一个基本身份验证。 在《邮递员》中,它起作用了。我提供的机构如下: { "title": "foo", "description": "bar", "completed": "false" } 并设置基本身份验证(使用用户名和密码)。API发送如下响应: { "id": 0001 } 如果我向api发送POST,一切都会正常工作,但现在我想用java实现它。如果

我知道类似的帖子,我检查过,但没有一个能帮我

我想发布到一个API(用于管理示例任务),它需要三个参数和一个基本身份验证。 在《邮递员》中,它起作用了。我提供的机构如下:

{
    "title": "foo",
    "description": "bar",
    "completed": "false"
}
并设置基本身份验证(使用用户名和密码)。API发送如下响应:

{
  "id": 0001
}
如果我向api发送POST,一切都会正常工作,但现在我想用java实现它。如果我尝试发送一个POST:HttpClientErrorException:400错误请求(DefaultResponseErrorHandler),我将收到一个400错误请求。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);
    }
Task Task=新任务(“foo”,“bar”,false);
RestTemplate=新的RestTemplate();
HttpEntity HttpEntity=新的HttpEntity(任务,createHttpHeader());
ResponseEntity结果=template.exchange(uri、HttpMethod.POST、httpEntity、TaskResponse.class);
私有HttpHeader createHttpHeader(){
HttpHeaders requestHeaders=新的HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
set(“授权”,createBasicAuthHeaderValue(用户名、密码));
返回请求头;
}
私有字符串createBasicAuthHeaderValue(字符串用户名、字符串密码){
字符串凭据=用户名+“:”+密码;
byte[]base64Credentials=Base64.encodeBase64(credentials.getBytes());
返回“Basic”+Arrays.toString(base64Credentials);
}

我发现这个实现很好。它接受字符串作为响应类型。还有另一个问题,但与此上下文无关。

我尝试了不同的方法,但没有任何方法适合我。在我看来,问题在于如何对响应作出反应,因为例如,作为响应返回的不是请求。这是完全不同的。在本例中,创建的任务的id。我试图使用String.class作为响应类型,但它不起作用。您是否在类路径中包含Jackson,并且可以启用跟踪模式并验证请求正文是否具有正确的Json表示形式。@Bhokal Jackson的作用是什么?我想知道…因为响应只是一个JSON。String.class不应该对我有用吗?我启用了跟踪模式,它前面有类名。对吗?通常情况下,这是因为只有大括号和字段<代码>使用[org.springframework.http.converter.json]将[Task{title='foo',description='bar',completed='false'}]编写为“application/json”。MappingJackson2HttpMessageConverter@5a12c728]