簡體   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