繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM