【问题标题】:RestTemplate POST - handle responseRestTemplate POST - 处理响应
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2015-08-07
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多