一、restful风格
1.每一个uri代表一种资源
2.客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
/*restful -->user/1.do
method:表示该方法处理get请求
1赋值给{id}
@PathVariable 如果该参数与{id}名不同(假设为uid),则使用@PathVariable("uid")
*/
@RequestMapping(value="{id}",method=RequestMethod.GET)//表明其不是路径而是参数 public String selectById(@PathVariable int id) {//。表明这是路径变量 System.out.println("selectByName==="+id); return "main"; }
/user/.do增添。restful风格和.do后缀的jsp配合有问题,这里必须加.do,否则会报无法使用post请求错误
@RequestMapping(value=".do",method=RequestMethod.POST) public String insert(User user) { System.out.println(user); return "main"; }
put和delete方式需要web.xml中配置过滤器
<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>
在请求中,需要在数据中加一条 _method:"put"("delete")将post方式转化为put或delete
/user/1.do 修改,这里value值不能加.do
@RequestMapping(value="{id}",method=RequestMethod.PUT) @ResponseBody//将结果以内容形式返回,put是ajax才有的请求方式,必须加上 public String update(@PathVariable Integer id, User user) { System.out.println(user+"根据"+id); return "main"; }
/user/1.do ,这里value值也不能加 .do
@RequestMapping(value= "{id}",method=RequestMethod.DELETE) @ResponseBody public String delete(@PathVariable Integer id) { System.out.println("删除id"+id); return "main"; }
二、springmvc异常处理
现使用注解@ExceptionHandler
1.controller类中添加方法
@ExceptionHandler public ModelAndView error(Exception exception) { ModelAndView mv=new ModelAndView(); mv.addObject("error", exception.getMessage()); mv.setViewName("error"); System.out.println("局部处理异常"); return mv; }
2.新增一个controller类,加全局注解
@ControllerAdvice public class ExceptionController { @ExceptionHandler public ModelAndView error(Exception exception) { ModelAndView mv=new ModelAndView("error"); mv.addObject("error", exception.getMessage()); return mv; } }
exception一旦捕获到异常则转入该方法,收集异常信息并转发到异常页面。但是ajax方式请求发生异常时不会跳转到错误页面,(异常本身也不会暴露在浏览器)
三、springmvc常见的注解
@Controller : 标注该类为控制层类。
@RequestMappint: 标注请求的地址
@ResponseBody: 把java对象转化为json对象。
@Valid: 标注校验该数据
@PathVariable: 接受uri地址的值赋给方法的参数
@SessionAttributes:设置其name中的key值默认保存到session域
@RequestParam:value 请求参数的参数名,作为参数映射名称;required 该参数是否必填;defaultValue 设置请求参数的默认值
@ControllerAdvice: 标注一个类为异常处理类
@ExceptionHandler: 标注一个方法为异常处理的方法。
@InitBinder: 处理日期时间参数