gpt4 book ai didi

java - 从 spring servlet HTTP 响应中删除 Content-Length 和 Transfer-Encoding header

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:26:37 24 4
gpt4 key购买 nike

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

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

最佳答案

您可以直接写入 HttpServletResponse 的 OutputStream。如果您需要,Spring 将为您提供 HttpServletResponse(和 HttpServletRequest),只需将其添加到您的方法签名中即可。

这样您就可以(大部分)完全控制 header 。您可能需要自己创建 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“手动”执行此操作。

关于java - 从 spring servlet HTTP 响应中删除 Content-Length 和 Transfer-Encoding header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com