从spring servlet HTTP Response中删除Content-Length和Transfer-Encoding标头

时间:2016-07-04 02:44:00

标签: java spring http

我想知道是否有办法从当前的响应中删除这些标头。我正在使用@ResponseBody注释,并且已经尝试使用过滤器尝试根据以下How do delete a HTTP response header?尝试不添加这些标头。

理想情况下,HTTP响应应该与此链接中的响应类似:https://api.github.com/users/mralexgray/repos,没有Content-Length和Transfer-Encoding标头。

1 个答案:

答案 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“手动”执行此操作。