2014-07-02 79 views
2

它将通过GET请求调用另一个REST API。如何通过Spring发送带有标题的GET请求

@RequestMapping(value = "xxxx/{id}", method = RequestMethod.GET) 
public @ResponseBody GetObjet GET(@PathVariable("id") String id, 
       @RequestHeader(value="X-Auth-Token") String Token) { 

    RestTemplate restTemplate = new RestTemplate(); 

    HttpHeaders headers = new HttpHeaders();   
    headers.add("X-Auth-Token", Token); 

    HttpEntity entity = new HttpEntity(headers); 
    ResponseEntity<GetObjet> response = restTemplate.exchange(url, HttpMethod.GET, entity, GetObjet.class); 

    return response.getBody(); 
} 

总是400错误。这意味着请求主体中的错误请求或一些错误。但是这是GET,因此resquest bodys总是空的。所以这种添加标题的方式可能不对。有任何想法吗?

+1

什么是'url'?为什么你把这段代码放在一个侦听'GET'请求的方法中?您是否尝试将代码的客户端部分用作独立客户端,而不是作为服务器的一部分? –

+0

@LutzHorn url是另一个rest api的地址。回答你的问题有点复杂。我需要我的API来调用另一个API。我知道这不好,但没有选择,因为我的私人问题TOT – DONG

回答

0

尝试使用:

RestTemplate.getForEntity(url, GetObject.class); 

你有一些方法从静止API请求数据,如getForEntitygetForObject,使用你所需要的一个。

+0

祢,但通过这种方式,我们如何添加标题? – DONG

1

您可以获得头包括符号@RequestHeader在你的方法

public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding, 
           @RequestHeader("Keep-Alive") long keepAlive) { 

} 

Ø

You can read more about the request here

而其他的方式来abtain的网址是:

@RequestMapping(value = "/restURL") 
    public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){ 
    //Use headers to get the information about all the request headers 
    long contentLength = headers.getContentLength(); 
    ... 
    StreamSource source = new StreamSource(new StringReader(body)); 
    YourObject obj = (YourObject) jaxb2Mashaller.unmarshal(source); 
    ... 
    } 
+0

但现在问题是resttemplate.exchange不起作用,当我们发送一个带请求的GET请求 – DONG