我有一个小测试,它应该返回一个带有 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 标头字段指示时才可缓存。
(我知道,我不需要 the@ResponseStatus(HttpStatus.TEMPORARY_REDIRECT)
或 theresponse.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"));
}
}