Springboot中的页面跳转
2019-03-15 本文已影响35人
PawsUp
通常来说,Controller
都会返回一个视图名称,Springboot会默认在main/resource/templates目录下找,因为该目录是安全的,意味着该目录下的内容是不允许外界直接访问的。有些情况下,Controller
会返回客户端一个HTTP Redirect
重定向请求,希望客户端按照指定地址重新发起一次请求,比如客户登陆成功之后,重定向到后台系统首页;客户端通过POST
提交了一个名单,可以返回一个重定向请求到此订单明细的请求地址,这样做的好处就是,如果用户再次刷新界面,则访问的是订单详情地址,而不会是再次提交订单。
-
Controller
中重定向返回以redirect:
为前缀的URI :首先,在
main/resource/templates
下创建一个detail.html
controller
中的代码如下(仅供参考):@Controller @RequestMapping @Slf4j public class DemoController { @Resource private UserMapper userMapper; @PostMapping("/insertuser.html") public String insertUser(User user){ /** * 插入用户信息,返回用户详情界面 */ return "redirect:/detail.html?openId="+user.getUserOpenid(); } @GetMapping("/detail.html") public String getUser(@RequestParam String openId ,Model model){ User user = userMapper.selectByOpenId(openId); model.addAttribute("user",user); return "detail.html"; } }
在postman中测试(在这里不在显示数据):
image.png还可以在
ModelAndView
中设置带有redirect:
为前缀的URI :ModelAndView modelAndView=new ModelAndView("redirect:/detail.html?openId="+user.getUserOpenid());
或者直接使用
RedirectView
类:RedirectView redirectView = new RedirectView("redirect:/detail.html?openId="+user.getUserOpenid());
-
Spring MVC也支持
foward
前缀,用来在Controller
执行完毕后,再执行另一个Controller
中的方法。@Controller @RequestMapping @Slf4j public class DemoController { @GetMapping("/index") public String index(){ return "forward:/detail/1-2.html"; } @GetMapping("/detail/{pageIndex}-{pageSize}.html") public String module(@PathVariable int pageIndex, @PathVariable int pageSize) { log.info("pageIndex-pageSize:{}",pageIndex+"-"+pageSize); return "detail.html"; } }
在postman中测试:
image.png