我想知道是否有办法从当前的响应中删除这些标头。我正在使用@ResponseBody注释,并且已经尝试使用过滤器尝试根据以下How do delete a HTTP response header?尝试不添加这些标头。
理想情况下,HTTP响应应该与此链接中的响应类似:https://api.github.com/users/mralexgray/repos,没有Content-Length和Transfer-Encoding标头。
答案 0 :(得分:0)
您可以直接写入HttpServletResponse的OutputStream。如果你需要,Spring会给你HttpServletResponse(和HttpServletRequest),只需将它添加到你的方法签名中即可。
这样你就可以(大部分)完全控制标题。您可能需要自己创建JSON,但通常很简单。例如......
private ObjectMapper mapper = new ObjectMapper();
@RequestMapping(value = "/getStuff", method = RequestMethod.GET)
public void getStuff(HttpServletResponse httpServletResponse) throws Exception {
try {
httpServletResponse.setHeader("Pragma","public");
httpServletResponse.setHeader("Expires","0");
httpServletResponse.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
httpServletResponse.setHeader("Cache-Control","public");
OutputStream outputStream = httpServletResponse.getOutputStream();
try {
mapper.writeValue(outputStream, myObject);
} finally {
outputStream.close();
}
这可能看起来不太优雅,但是通过使用@ResponseBody
,您可以使用它来方便地完成创建响应的所有艰苦工作。但如果没有按照您的意愿创建响应,您可以退后一步,使用HttpServletResponse“手动”执行此操作。