簡體   English   中英

response.sendRedirect顯示不需要的HttpStatus 302而不是307

[英]response.sendRedirect shows unwanted HttpStatus 302 instead of 307

我有一個小測試,該測試應返回帶有HttpStatus代碼307的臨時重定向的HttpStatus。
但它總是返回302。

@RestController
@RequestMapping(value = "/")
public class Controller {

    @ResponseStatus(HttpStatus.TEMPORARY_REDIRECT ) 
    @RequestMapping(value= "test", method = RequestMethod.GET)
    public void resolveUrl(HttpServletResponse response) throws IOException {
        response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
        response.sendRedirect("https://www.google.com");
    }
}

當我查看response.sendRedirect()的文檔時,我可以讀到以下內容:

使用指定的*重定向位置URL向客戶端發送臨時重定向響應。

臨時重定向文檔是307

10.3.8 307臨時重定向

所請求的資源臨時位於其他URI下。 由於重定向有時可能會改變,所以客戶端應該繼續使用Request-URI來處理以后的請求。 僅當由Cache-Control或Expires標頭字段指示時,此響應才可緩存。

(我知道,我不需要@ResponseStatus(HttpStatus.TEMPORARY_REDIRECT)response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);但我想表明它也無法與此功能配合!)

但是我的測試表明它是302而不是307

java.lang.AssertionError:預期狀態:<307>但原為:<302>

有人可以解釋一下嗎?

我對此的小測試:

@RunWith(SpringRunner.class)
@WebMvcTest(Controller.class)
public class ControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void test() throws Exception {
        MockHttpServletRequestBuilder requestBuilder = get("/test");
        mvc.perform(requestBuilder).andExpect(status().isTemporaryRedirect())
                .andExpect(redirectedUrl("https://www.google.com"));
    }

}

完整的代碼可以在github上找到

而是使用sendRediect,在響應對象中設置Location標頭。

    response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);

response.setHeader(“ Location”,“ https://we.google.com ”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM