restful是一种请求路径的规范。要符合它这种风格,才能实现它这种简便的效果。
资源:在互联网上,所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
@RequestMapping(value="{propam}",method=RequestMethod.GET) public String findById(@PathVariable("propam") int id) { if(id==3){ throw new RuntimeException("参数错误"); } return "login"; }
上面的就是使用restful的风格,实现的请求地址的,它是使用get方法,来对资源操作的
method=RequestMethod.GET 表示请求方式为get方式
value="{propam}" 表示从地址栏传过来的值,赋值赋值给propam,
@PathVariable("propam") int id 前面的注解代表的是将propam变量的值赋值给id;
使用了路径变量可以让路径变得简单;获得参数更加方便,框架还会自动进行类型转换。
通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/test1/1/a,则路径与方法不匹配,而不会是参数转换失败。
对资源操作还有post,put,delete。get表示查询操作、post表示添加操作、put表示修改操作、delete表示删除操作。在与数据库交互时,非常好用的一种风格操作
在使用提交方式为put和delete的时候。我们必须在web.xml文件中配置过滤器。
<!-- 把post请求转化为put或delete请求,然后使用_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>
控制层的格式:
@ResponseBody @RequestMapping(value="{id}",method=RequestMethod.PUT) public String upt(@PathVariable() int id,Users user) { System.out.println(user+"update"); return "login"; } @ResponseBody @RequestMapping(method=RequestMethod.DELETE) public String delete(int id) { System.out.println(id+"===============delete"); return "login"; }
在方法前必须加上@ResponseBody的注解,因为使用ajax,返回的是json对象,不是请求路径了。
定义一个全局异常类:
package com.zhiyou100.lw.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 ee) { ModelAndView mv=new ModelAndView(); mv.addObject("error",ee.getMessage()); mv.setViewName("../ya"); return mv; } }
必须和controller控制层在同一个包下,如果controller类里面的某个方法发生异常,就会直接进入这个异常类,执行该方法,创建一个ModelAndView类的对象,然后调用里面的方法,把错误信息传到前端页面中。
springmvc:注解
@controller:标注该类为控制层类
@RequestMapping:标注请求地址
@ResponseBody:把Java对象转化为json对象
@Valid:标注校验该数据
@PathVariable:接收URI地址的值赋值给方法的参数
@SessionAttribute(names={}):将数据保存到session中
@RequestParam:为参数起别名;
@ExceptionAdvice:标注这个类为异常处理类
@ExceptionHandler:标注这个方法为异常处理方法
@InitBinder:处理日期时间参数
原文:https://www.cnblogs.com/lw97-1014/p/11470407.html