1.restful风格
(1)REST架构是一个抽象的概念,目前主要是基于HTTP协议实现,其目的是为了提高系统的可伸缩性,降低应用之间的耦合度,便于框架分布式处理程序。
(2)Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
(3)在resultful风格中,用户请求的url使用同一个URL而用请求方式:get/post/delete/put等方式对请求的处理方法进行区分。这样可以在前后台分离的开发中让前端开发人员不会对请求的资源地址产生混淆,形成一个统一的接口。
列子:
1.在controller类中:
控制层会根据你的请求方式调用不同的方法
@RequestMapping(value="{uid}",method=RequestMethod.GET)//查询操作 public String findById(@PathVariable("uid") int id) { System.out.println("=====findById====="+id); return "index"; } @RequestMapping(method=RequestMethod.POST)//添加操作 public String insertUser(Users user) { System.out.println(user+"save"); return "index"; } @RequestMapping(method=RequestMethod.PUT)//修改操作 @ResponseBody public String updateUser(Users user) { System.out.println(user+"update"); return "index"; } @RequestMapping(value="{id}",method=RequestMethod.DELETE)//修改操作 @ResponseBody public String deleteUser(@PathVariable("id") int id) { System.out.println("====delete==="+id); return "index"; }
2.编写完成后进行测试,在这里我们用一个google的插件进行测试,可以选择提交方式等十分的方便
插件安装:D:Java工具Advanced-REST-client_v3.1.9
安装步骤:D:Java工具
(1)请求地址http://localhost:8080/Springmvc-04/user/6
测试GET和POST均通过,显示200状态码(通过)
(2)在提交put和delete方法时候,要在web.xml中配置过滤器;因为浏览器端只可通过GET和POST,所以我们需要在测试时添加属性_method=PUT/_method=DELETE,
对应的需要在配置文件中加入一个过滤器【HiddenHttpMethodFilter】这个过滤器的作用是将POST提交的_method=PUT/_method=DELETE通过转化为PUT/DELETE
如何找到org.springframework.web.filter.HiddenHttpMethodFilter:
<!-- 把post请求转化为put和delere请求使用 _method 表示真正的提交方式 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
测试结果:
2.异常处理
1.如果在controller类中出现异常如何来处理异常
@RequestMapping(value="{uid}",method=RequestMethod.GET)//查询操作 public String findById(@PathVariable("uid") int id) { System.out.println("=====findById====="+id); if(id==0) { throw new RuntimeException("请求的参数有错误"); } return "index"; }
2.解决方式:
(1)第一种:局部处理异常
//局部处理异常;只能处理该类中的异常 @ExceptionHandler //当该类中发生异常时会由该方法来处理 public ModelAndView error(Exception exception){ ModelAndView mv=new ModelAndView(); mv.addObject("error", exception.getMessage()); mv.setViewName("error"); return mv; }
(2)第二种:全局处理异常
创建一个ExceptionController.java类
package com.zhiyou100.xg.controller; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class ExceptionController { //全局处理异常 @ExceptionHandler //当该类中发生异常时会由该方法来处理 public ModelAndView error(Exception exception){ ModelAndView mv=new ModelAndView(); mv.addObject("error", exception.getMessage()); mv.setViewName("error"); return mv; } }
(3)测试全局变量:
另外创建一个StudentController.java类
package com.zhiyou100.xg.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/student") public class StudentController { @RequestMapping(value="{uid}",method=RequestMethod.GET)//查询操作 public String findById(@PathVariable("uid") int id) { System.out.println("=====findById====="+id); if(id==0) { throw new RuntimeException("请求的参数有错误2"); } return "index"; } }
(4)前端页面代码:
其中需加入isErrorPage="true"属性,意思是此页面为错误信息显示页面,我们再次接收错误信息,当处理了上面的异常后跳出到这里显示
3.Tips(SpringMVC部分注解)
SpringMVC注解:
1@Controller:标注该类为控制层类
2.@RequestMapping:标注请求的地址
3.@ResponseBody:把java对象转化为json对象
4.@Valid:标注校验该数据
5.@PathVariable:接收uri地址的值赋值给参数
6.@SessionAttributes:保存到Session中
7.@RequestParam:接收参数若参数名不同可用,当没传参数值时可设置默认值
8.@ExceptionAdivice:标注一个类为异常处理类
9.@EcceptionHandler:标注一个方法为异常处理方法
10.@InitBinder:时间参数处理格式