springMVC日记(四)

一、restful风格

  1.每一个uri代表一种资源

  2.客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;

  3.通过操作资源的表现形式来操作资源;
  4.资源的表现形式是XML或者HTML;
  5.客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
它只能在增删改查中各使用一种具体操作,多于一种只能在访问地址上暴露key值
一个demo对user(id,name,pw,tel)进行restful风格的CRUD操作,(进入dispatcher的地址格式为*.do)
/*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一旦捕获到异常则转入该方法,收集异常信息并转发到异常页面。但是以上restful风格方法无法跳转到异常页面,暂时没有解决方法,普通方法无此问题

 三、springmvc常见的注解

 @Controller : 标注该类为控制层类。

 @RequestMappint: 标注请求的地址

 @ResponseBody: 把java对象转化为json对象。

 @Valid: 标注校验该数据

 @PathVariable: 接受uri地址的值赋给方法的参数

 @SessionAttributes:设置其name中的key值默认保存到session域

@RequestParam:value 请求参数的参数名,作为参数映射名称;required 该参数是否必填;defaultValue 设置请求参数的默认值

@ExceptionAdvice: 标注一个类为异常处理类

@ExceptionHandler: 标注一个方法为异常处理的方法。

@InitBinder: 处理日期时间参数

猜你喜欢

转载自www.cnblogs.com/psxfd4/p/11470583.html