2013-02-27 74 views
3

我正在尝试使用RestTemplate以创建PUT。出于某种原因,我无法复制我使用curl创建的PUT,这个过程没有任何问题。RestTemplate的用法

这里是我的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版本?

+0

http://garciapl.blogspot.com/2012/09/spring-rest-template-with-ssl.html – 2013-02-27 08:41:50

+0

添加只是文档片断似乎并没有帮助。还有什么我应该看看? – 2013-02-27 08:58:53

回答

1

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

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