Spring Boot中的页面跳转

通常来说,Controller都会返回一个视图名称,Spring Boot会默认在main/resource/templates目录下找,因为该目录是安全的,意味着该目录下的内容是不允许外界直接访问的。有些情况下,Controller会返回客户端一个HTTP Redirect重定向请求,希望客户端按照指定地址重新发起一次请求,比如客户登陆成功之后,重定向到后台系统首页;客户端通过POST提交了一个订单,可以返回一个重定向请求到此订单明细的请求地址,这样做的好处就是,如果用户再次刷新界面,则访问的是订单详情地址,而不会是再次提交订单。

1. return new ModelAndView("redirect:http://www.appblog.cn/success");  //若报错则采用方法3或4

2. return "redirect:http://www.appblog.cn/success";  //若报错则采用方法3或4

3. return new RedirectView("http://www.appblog.cn/success");

4. return new ModelAndView(new RedirectView("http://www.appblog.cn/success"));

redirect

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";
    }
}

还可以在ModelAndView中设置带有redirect:为前缀的URI:

ModelAndView modelAndView = new ModelAndView("redirect:/detail.html?openId=" + user.getUserOpenid());

或者直接使用RedirectView类:

RedirectView redirectView = new RedirectView("redirect:/detail.html?openId=" + user.getUserOpenid());

forward

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";
    }
}
上一篇 Spring Boot使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常
下一篇 Spring Boot事务使用
目录
文章列表
1 Spring Cloud手动创建Feign客户端后zipkin调用链断层问题解决
Spring Cloud手动创建Feign客户端后zipkin调用链断层问题解决
2
Java正则表达式匹配一个或多个空格
Java正则表达式匹配一个或多个空格
3
Android aar包发布到maven仓库总结
Android aar包发布到maven仓库总结
4
Android Parcelable中枚举的写法
Android Parcelable中枚举的写法
5
Spring Cloud与Dubbo对比
Spring Cloud与Dubbo对比
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。