【问题标题】:RestTemplate usageRestTemplate 使用
【发布时间】:2013-02-27 08:39:01
【问题描述】:

我正在尝试使用RestTemplate 来创建PUT。出于某种原因,我无法重现使用curl 创建的PUT,它可以顺利通过。

这是我的 curl 调用成功并返回 200:

curl https://www.exampe.com \
  -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <bearer-token>" \
  -v \
  -d '{"json":"object"}'

这里是试图复制这个curl 调用的Java 代码。在我的情况下,这段代码将抛出HttpClientErrorException,状态= 406:

boolean result = false; 
String url = "https://www.example.com";
String json = "{\"json\":\"object\"}";

RestTemplate rest = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Authorization", String.format("Bearer %s", authToken));

HttpEntity<String> requestEntity = new HttpEntity<String>(json, headers);
ResponseEntity<String> responseEntity = 
        rest.exchange(url, HttpMethod.PUT, requestEntity, String.class);

HttpStatus status = responseEntity.getStatusCode();

这些请求之间有什么区别?如何将 Java 版本融合到 curl 版本?

【问题讨论】:

标签: java http curl put resttemplate


【解决方案1】:

Agghr,太愚蠢了。缺少的部分是 Accept 标头。显然curl 默认添加Accept: */*。它可能是期望正确的Accept 标头的端点实现。添加此行解决了问题:

headers.add("Accept", "*/*");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2017-03-09
    • 2016-07-22
    • 2022-01-22
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多