我有一个小测试,它应该返回带有HttpStatus Code 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"));
}
}