[英]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向客戶端發送臨時重定向響應。
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"));
}
}
而是使用sendRediect,在響應對象中設置Location標頭。
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader(“ Location”,“ https://we.google.com ”);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.