RestTemplate客户端和cookie


问题内容

我正在用Java编写一个简单的客户端,以允许可重用​​通过RESTful
API访问的专有病毒扫描软件。要上传文件以扫描API,需要先使用POSTConnect(连接),然后再要求将POST文件发布到服务器。在对Connect的响应中,POST服务器设置了cookie,随后将需要cookie
POST来发布文件。我当前RestTemplate在客户端中使用Spring 。

我的问题是我如何访问响应中的cookie,以便随后将其转发回服务器POST?我可以看到它们存在于返回的标头中,但是没有ResponseEntity访问它们的方法。


问题答案:

RestTemplate有一个方法,您可以在其中定义Interface
ResponseExtractor<T>,此接口用于获取响应的标头,一旦有了它们,就可以使用发送回来HttpEntity并再次添加。

 .add("Cookie", "SERVERID=c52");

尝试这样的事情。

String cookieHeader = null;

new ResponseExtractor<T>(){
      T extractData(ClientHttpResponse response) {
        response.getHeaders();
      }
}

然后

  HttpHeaders headers = new HttpHeaders();
  headers.add("Cookie", cookieHeader );

  ResponseEntity<byte[]> response = restTemplate.exchange("http://example.com/file/123",
      GET,
      new HttpEntity<String>(headers),
      byte[].class);