Java 如何返回Apache';在Spring';是HttpServletResponse吗?
我有一个使用Spring的端点:Java 如何返回Apache';在Spring';是HttpServletResponse吗?,java,spring,servlets,proxy,httpresponse,Java,Spring,Servlets,Proxy,Httpresponse,我有一个使用Spring的端点: @RequestMapping(value = {"/hello"}, method = RequestMethod.GET) @ResponseBody public String getContent(@RequestParam(value = "url", required = true) String url) 我希望它返回与我发送get tourl时得到的完全相同的响应。我正在使用Apache库执行GET,它将返回一个CloseableHttpRes
@RequestMapping(value = {"/hello"}, method = RequestMethod.GET)
@ResponseBody
public String getContent(@RequestParam(value = "url", required = true) String url)
我希望它返回与我发送get tourl
时得到的完全相同的响应。我正在使用Apache库执行GET,它将返回一个CloseableHttpResponse
。如何将此响应作为端点的响应返回?我当前的代码复制了这个响应,这不是我想要的。我想直接返回可关闭的httpresponse
。我之所以想这样做,是因为一些网站拥有非常庞大的数据,我希望避免不得不复制这些数据
@RequestMapping(value = {"/hello"}, method = RequestMethod.GET)
@ResponseBody
public String getContent(@RequestParam(value = "url", required = true) String url, HttpServletResponse response)
CloseableHttpResponse httpResponse = useApacheLibraryAndSendGetToUrl(url);
for (Header header : httpResponse.getAllHeaders()) {
response.addHeader(header.getName(), header.getValue());
}
response.setStatus(httpResponse.getStatusLine().getStatusCode());
return EntityUtils.toString(entity, "UTF-8");
}
您可以为
CloseableHttpResponse
类型编写自定义的HttpMessageConverter
,这将允许您简单地返回@responseBy CloseableHttpResponse
有关详细信息,请参见。当然要小心在适当的时间实际关闭
CloseableHttpResponse
。此外,直接将CloseableHttpResponse
实体的InputStream
复制到HttpServletResponse
的OutputStream
,可能会提供更好的性能或内存使用率,而不是使用EntityUtils.toString
首先将响应复制到字符串中。如果我使用转换器,这不也是我在这里做的事情吗,我必须从CloseableHttpResponse复制数据,并在Spring中将其转换为某种形式的响应?我忘了提到我遇到的问题是一些网站有非常巨大的标题数据,我想避免复制这些。你所做的很好。