博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器...
阅读量:5264 次
发布时间:2019-06-14

本文共 6294 字,大约阅读时间需要 20 分钟。

一、参数的传递

1、简单的参数传递

1  /* @RequestParam用法:入参名字与方法名参数名不一致时使用{2   *     value:传入的参数名,required:是否必填,defaultValue:默认值3  * }4  */5  @RequestMapping("itemEdit")6  public ModelAndView itemEdit(@RequestParam(value="id",required=true,defaultValue="1")Integer id){....}

2、Model/ModelMap

1 /** 2  * 演示返回String,通过Model/ModelMap返回数据模型 3  * 跳转修改商品信息页面 4  * @param id 5  * @return 6  */ 7  @RequestMapping("itemEdit") 8  public String itemEdit(@RequestParam("id")Integer ids,Model m,ModelMap model){  9      //查询商品信息10      Item item = itemServices.getItemById(ids);11      //通过Model把商品数据返回页面12      model.addAttribute("item", item);13      //返回String视图名字14      return "itemEdit";15  }

3、pojo与包装pojo

要点:表单提交的name属性必需与pojo的属性名称一致。
1 /** 2  * 演示传递pojo参数 3  * 更新商品信息 4  * @return 5  */ 6  @RequestMapping("updateItem") 7  public String updateItem(Item item,Model model){ 8       //更新商品 9       itemServices.update(item);10       //返回商品模型11       model.addAttribute("item", item);12       //返回担任提示13       model.addAttribute("msg", "修改商品成功");14       //返回修改商品页面15       return "itemEdit";16  }

4、自定义参数绑定

①自定义转换器

1 /** 2  * 日期转换器 3  * S:source 要转换的源类型 4  * T:目标,要转换成的数据类型 5  * @author Steven 6  */ 7 public class DateConvert implements Converter
{ 8 9 @Override10 public Date convert(String source) {11 Date result = null;12 try {13 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");14 result = sdf.parse(source);15 } catch (ParseException e) {16 e.printStackTrace();17 }18 return result;19 }20 }
② 配置日期转换器
1 
2
3
4 5
6
7
8
9
10
11
12

5、数组参数传递

1 @RequestMapping("/queryItem") 2 public String queryItem(QueryVo vo,Integer[] ids){ 3      System.out.println(vo); 4      if (ids != null && ids.length > 0){ 5         for (Integer id : ids) { 6             System.out.println(id); 7         } 8       } 9       return "itemList";10 }

二、Controller方法返回值

1、返回ModelAndView

1 @RequestMapping("itemList")2 public ModelAndView queryItemList(){3 4     ModelAndView modelAndView = new ModelAndView();5     modelAndView.setViewName("itemList");6     List
list = itemService.getItemList();7 modelAndView.addObject("itemList",list);8 return modelAndView;9 }

2、返回void:使用原始的request、response处理

3、返回String 

①返回视图的名字

②转发,跳转action

1 @RequestMapping(value = "updateItem",method = RequestMethod.POST)2 public String updateItem(Item item, Model model){3   model.addAttribute("item",item);4   return "forward:/itemEdit.action";5 }

③重定向,跳转action

return "redirect:/itemEdit.action";

三、json数据交互

1、依赖jar包

jackson-annotation-2.4.0.jar

jackson-cort-2.4.0.jar
jackson-databind-2.4.2.jar

2、代码演示

1 /** 2  * json数据交互演示 3  * @param item2 4  * @return 5  */ 6  @RequestMapping("getItem") 7  //@ResponseBody把pojo转成json串响应用户 8  @ResponseBody 9  //@RequestBody用于接收用户传入json串转成pojo10  public Item getItem(@RequestBody Item item2) {11       System.out.println("接收到的json商品数据为:" + item2);12       Item item = itemServices.getItemById(3);13       return item;14  }

四、异常处理

1、需实现HandlerExceptionResolver 

1 /** 2  * 全局异常处理器 3  * @author Steven 4  * 5  */ 6 public class CustomerException implements HandlerExceptionResolver { 7  8     @Override 9     public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder,10             Exception e) {11         //记录日志12         e.printStackTrace();13         //错误消息 14         String msg = "很抱歉,系统发生异常了,请联系管理员";15         16         //响应用户错误提示17         ModelAndView mav = new ModelAndView();18         //返回错误消息19         mav.addObject("msg", msg);20         //响应错误提示页面21         mav.setViewName("msg");22         return mav;23     }24 }

2、在springmvc.xml中配置全局异常处理器

1 
2

五、图片上传

1、需要支持的jar包

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

2、配置多媒体解析器

3、注意事项

① 表单需添加enctype="multipart/form-data" 属性

② controller层接收的入参需要添加MultipartFile picFile,其中picFile为表单中对应的文件name属性名。

③ 保存图片使用绝对路径,访问使用虚拟路径

4、controller代码

1 @RequestMapping(value = "updateItem", method = { RequestMethod.POST, RequestMethod.GET }) 2 public String updateItem(Item item, Model model, MultipartFile picFile) throws Exception { 3  4         // 图片新名字 5         String name = UUID.randomUUID().toString(); 6         // 图片原名字 7         String oldName = picFile.getOriginalFilename(); 8         // 后缀名 9         String exeName = oldName.substring(oldName.lastIndexOf("."));10 11         File pic = new File("D:\\WebWork\\" + name + exeName);12         // 保存图片到本地磁盘13         picFile.transferTo(pic); 14         // 更新商品图片信息15         item.setPic(name + exeName);16 17         itemServices.update(item);18         model.addAttribute("item", item);19         model.addAttribute("msg", "修改商品成功");20         return "itemEdit";21 }

六、拦截器

1、需实现HandlerInterceptor

1 /** 2  * 自定义拦截器 3  * @author Steven 4  * 5  */ 6 public class MyInterceptor1 implements HandlerInterceptor { 7  8     //在preHandle方法返回true并且Controller方法完全执行完后被执行 9     //处理异常、记录日志10     @Override11     public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)12             throws Exception {13         System.out.println("MyInterceptor1.afterCompletion.....");14     }15 16     //在Controller方法执行后,返回ModelAndView之前被执行17     //设置或者清理页面共用参数等等18     @Override19     public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)20             throws Exception {21         System.out.println("MyInterceptor1.postHandle.....");22     }23 24     //在Controller方法执行前被执行25     //登录拦截、权限认证等等26     @Override27     public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {28         29         System.out.println("MyInterceptor1.preHandle.....");30         31         //返回true放行,false拦截32         return true;33     }34 35 }

2、在springmvc.xml配置拦截器

 

1 
2
3
4
5
6
7
8
9

 

转载于:https://www.cnblogs.com/gdwkong/p/8977884.html

你可能感兴趣的文章
大数据测试指标(一)
查看>>
Java Socket 检测远程地址可否通信
查看>>
Gridview用法大总结(牛年珍藏版)
查看>>
[代码]强制浏览器重定向到另一页
查看>>
javaweb中的乱码问题
查看>>
(47)zabbix报警媒介:Ez Texting
查看>>
MySQL数据库 基本操作
查看>>
请大家规范电子邮件用法养成好的邮件习惯
查看>>
微信游戏和微信公众号小说如何有效做好域名防封,给大家分享我的有效经验...
查看>>
前端跨域知识总结
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
dom操作
查看>>
python基础——流程控制语句
查看>>
Raspberry Pi GPIO Protection
查看>>
架构漫谈阅读感想
查看>>
《掌握需求过程》阅读笔记---01
查看>>
144. Binary Tree Preorder Traversal
查看>>
我是如何入门机器学习的呢
查看>>
【十大经典数据挖掘算法】k-means
查看>>