Spring MVC redirect 注意小总结

背景:因为要在项目中用axios(或者ajax)调用一个后台Controller中的@PostMapping标注的方法A,如果成功,则调用方法B跳转,方法B中最后一行是return "redirect:/url",但是前端页面一直跳转不了,在网上查了一下有以下几个问题。

1. ajax不支持redirect(但是具体为啥没找到,只是看到很多人说不支持)

解决办法:只能在方法A返回参数,然后赋值给前端的Form,用Form调用后台另一个接口B进行跳转。如果在A中能处理所有逻辑,可以用Form直接调用接口A,让A来retrun redirect。

2. @RestController

这个注解是@Controller和@ResponseBody的简写。如果要跳转,只能写@Controller。@ResponseBody会将返回值处理为json串。

3. POST跳转到GET/POST

一般直接写"redirect:/url"是返回302,然后浏览器获取location再跳转(好像是这样)。如果从POST方式中redirect,302跳转的时候会改为GET方式。(参考https://www.cnblogs.com/cswuyg/p/3871976.html)

如果下一个接口也用的POST,可以在redirect之前给HttpServletRequest添加属性。(参考https://www.baeldung.com/spring-redirect-and-forward)

request.setAttribute(
       View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.TEMPORARY_REDIRECT);

也就是改用307跳转。

参考:

https://www.baeldung.com/spring-redirect-and-forward

https://www.cnblogs.com/cswuyg/p/3871976.html

总结一下以防忘记,如果上面有什么问题,请指正。

猜你喜欢

转载自www.cnblogs.com/jane850113/p/12438891.html