java RestTemplate的使用
我试图使用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
版本
# 1 楼答案
阿格,太蠢了。缺少的部分是
Accept
头。显然curl
默认情况下会添加Accept: */*
。可能是端点实现需要适当的Accept
头。添加这一行解决了问题: