Spring MVC组件开发-重定向

要将一个图书信息转化为JSON视图的功能,只要传递图书信息给它,它就能将信息转化为视图:

@RequestMapping("/book/showBookJsonInfo")  
public ModelAndView showBookJson(Book book){  
     var mv = new ModelAndView();  
     mv.addObject("book",book);  
     mv.setView(new MappingJackson2JsonView());  
     return mv;  
}  

现在的需求是,每当新增一个图书信息时,需要将其数据(图书编号会回填)以json视图的形式展示给请求者。在数据保存到数据库后,由数据库返回图书编号,再将图书信息传递给showBookJson方法,就可以展示json视图给请求者了:

@RequestMapping("/book/saveBook")  
//Model为重定向数据模型,Spring Mvc会自动初始化它  
public String saveBook(Book book,Model model){  
     service.save(book);// 插入图书后,会回填图书编号  
     //绑定重定向数据模型  
     model.addAttribute("book",book);//只能传递简单属性,pojo需要flash属性  
     return "redirect:./showBookJsonInfo";  
}  

 这里的Model代表一个数据模型,可以给它附加上对应的数据模型。Spring MVC有一个约定,当返回的字符串中带有redirect的时候,它就会认为需要的是一个重定向,而事实上,不仅可以通过返回字符串来实现重定向,也可以通过返回视图来实现重定向

@RequestMapping("/saveBook2")  
public ModelAndView saveBook2(ModelAndView mv,Book book){  
     mv.addObject("book",book);//只能传递简单属性,pojo需要flash属性  
     mv.setView("redirect:./book/showBookJsonInfo");  
     return mv;  
}  

经测试,这样并不能将参数顺利传递给重定向的地址,因为在url重定向的过程中,http的重定向参数是以字符串传递的,如果需要传递图书pojo来完成任务,这个时候Springmvc提供了一个方法-----flash属性,需要提供的数据模型就是一个RedirectAttribute:

@RequestMapping("/saveBook3")  
public String saveBook3(RedirectAttributes ra,Book book){  
     ra.addFlashAttribute("book",book);//绑定重定向数据模型  
     mv.setView("redirect:./book/showBookJsonInfo");  
     return "redirect:./showBookJsonInfo";  
}  

这样就能够传递pojo给下一个地址了,那么它是如何做到的呢?使用addFlashAttribute方法后,springmvc会将数据保存到session中(session在同一个会话有效),重定向后就会将其清除, 这样就能够传递给下一个地址了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值