[英]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.