有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    阿格,太蠢了。缺少的部分是Accept头。显然curl默认情况下会添加Accept: */*。可能是端点实现需要适当的Accept头。添加这一行解决了问题:

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