[英]Remove Content-Length and Transfer-Encoding Headers from spring servlet HTTP Response
我想知道是否可以从当前响应中删除这些标头。 我正在使用@ResponseBody批注,并且已经根据以下方法尝试使用过滤器尝试不添加这些头, 如何删除HTTP响应头? 。
理想情况下,HTTP响应应类似于以下链接中的响应: https : //api.github.com/users/mralexgray/repos ,不包含Content-Length和Transfer-Encoding标头。
您可以直接写到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“手动”执行该响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.