我正在用Java编写一个简单的客户端,以允许可重用使用通过RESTful API访问的专有病毒扫描软件.要上传用于扫描API的文件,需要POST for Connect,然后使用POST将文件发布到服务器.在对Connect POST的响应中,服务器设置了cookie,需要在后续POST中出现以发布文件.我目前正在客户端使用Spring RestTemplate.
我的问题是如何访问响应中的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);
另请阅读此post