如何从RestTemplate读取响应头?
我使用RestTemplate.postForObject将信息发布到Web服务。 除了结果字符串,我还需要响应头中的信息。 有没有办法得到这个?
RestTemplate template = new RestTemplate(); String result = template.postForObject(url, request, String.class);
好吧,我终于明白了。 交换方法正是我所需要的。 它返回一个包含完整标题的HttpEntity。
RestTemplate template = new RestTemplate(); HttpEntity response = template.exchange(url, HttpMethod.POST, request, String.class); String resultString = response.getBody(); HttpHeaders headers = response.getHeaders();
最好的办法是使用execute方法并传入一个ResponseExtractor ,它可以访问头文件。
private static class StringFromHeadersExtractor implements ResponseExtractor { public String extractData(ClientHttpResponse response) throws { return doSomthingWithHeader(response.getHeaders()); } }
另一个选项(不太干净)是扩展RestTemplate并覆盖对doExecute
的调用,并在那里添加任何特殊的头处理逻辑。
我不知道这是否是推荐的方法,但如果您将模板配置为使用自定义HttpMessageConverter
,则看起来您可以从响应标头中提取信息。
HttpEntity> entity = new HttpEntity<>( postObject, headers ); // for request HttpEntity response = template.exchange(url, HttpMethod.POST, entity, String.class); String result= response.getBody(); HttpHeaders headers = response.getHeaders();
- Spring Expression Language和Spring Security 3:在@PreAuthorize中访问bean引用
- 如何在java中将ArrayList转换为String ,Arraylist包含VO对象
- Spring JDBC没有使用log4j记录SQL
- 如何杀死BufferedInputStream .read()调用
- SpringMVC Jackson2HttpMessageConverter定制不起作用
- 如何以编程方式构建pom文件的有效模型?
- 给定一个字符串,生成一个可以解析*类似*字符串的正则表达式
- Wicket 6 IColumn名称除字符串外的类型如何?
- 在java中,我如何找到第n个Fibonacci数?