繁体   English   中英

RestTemplate用法

[英]RestTemplate usage

我正在尝试使用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代码。 在我的情况下,此代码将抛出状态= 406的HttpClientErrorException

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版本?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM