springmvc基础:(4)springmvc的注解

spirngmvc的注解:

         重要注解@RequestMapping:

            @RequestMapping: 通过RequestMapping注解可以定义不同的处理器映射规则。
        URL路径映射
            @RequestMapping(value="/item")或@RequestMapping("/item)
            value的值是数组,可以将多个url映射到同一个方法
            value数组:
            eg:             

  @RequestMapping(value={"url","resturl"})
                @ResponseBody
                public String url() {
                    return "url";
                }

        窄化请求映射

            在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。
            如下:
                @RequestMapping放在类名上边,设置请求前缀
                @Controller
                @RequestMapping("/item")
                方法名上边设置请求映射url:
                @RequestMapping放在方法名上边,如下:
                @RequestMapping("/queryItem ")
                实际访问地址为:/item/queryItem

        请求方法限定
            限定GET方法
                @RequestMapping(method = RequestMethod.GET)
                如果通过Post访问则报错:
                HTTP Status 405 - Request method 'POST' not supported
                例如:
                @RequestMapping(value="/editItem",method=RequestMethod.GET)
            限定POST方法
                @RequestMapping(method = RequestMethod.POST)

                如果通过Post访问则报错:
                HTTP Status 405 - Request method 'GET' not supported
            GET和POST都可以
                @RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

     1.1.2  配置validator    

    <!-- 加载校验信息资源文件 -->
    <bean id="messageSource" 
                class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 资源文件的基础名称 -->
        <property name="basenames">
            <list>
                <value>classpath:UserValidationMessage</value>
            </list>
        </property>
        <!-- 资源文件的编码集 -->
        <property name="fileEncodings" value="UTF-8"></property>
        <!-- 资源文件的缓存时间 -->
        <property name="cacheSeconds" value="120"></property>
    </bean>
    <!-- 校验器 -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
        <property name="validationMessageSource" ref="messageSource"></property>
    </bean>

    1.1.3 将validator加到处理器适配器        

<mvc:annotation-driven validator="validator"> </mvc:annotation-driven>

    1.1.4 添加验证规则  

  public class User{
        private Integer id;
        @Size(min=6,max=20,message="{username.length.error}")
        private String userName;
        @NotEmpty(message="{userpass.isnull.error}")
        private String userPass;
    }

    1.1.5 错误消息文件CustomValidationMessages      

        username.length.error=用户名必须在1到30个字符之间!
        userpass.isnull.error=密码不能为空!
        如果在eclipse中编辑properties文件无法看到中文则参考“Eclipse开发环境配置-indigo.docx”添加propedit插件。

      1.1.6 捕获错误     

        修改Controller方法:
        @RequestMapping("/add")
        public String add(@Validated User user,BindingResult result,Model model)
           throws Exception {
        //如果存在校验错误则转到商品修改页面
               if (result.hasErrors()) {
                   List<ObjectError> errors = result.getAllErrors();
                   for(ObjectError objectError:errors){
                      System.out.println(objectError.getCode());
                      System.out.println(objectError.getDefaultMessage());
                      model.addAttribute("errors", errors);
                   }
                   return "add";
               }
            //省略业务代码
               return "success";
        }

        注意:添加@Validated表示在对items参数绑定时进行校验,校验信息写入BindingResult中,在要校验的pojo后边添加BingdingResult, 一个BindingResult对应一个pojo,且BingdingResult放在pojo的后边。
    1.1.7新建add.jsp页面       

        <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        <%
            String path = request.getContextPath();
            String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
        %>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
          <head>
            <base href="<%=basePath%>">
            <title>My JSP 'index.jsp' starting page</title>
          </head>
          <body>
               <font color="red">
                   <c:forEach items="${errors}" var="err">
                       ${err.defaultMessage}<br>
                   </c:forEach>
               </font>
              <form action="user/add" method="post">
                  用户名:<input type="text" name="userName"><br>
                  密码:<input type="text" name="userPass"><br>
                  <input type="submit" value="新增">
              </form>
          </body>
        </html>

1.2 分组校验
        如果两处校验使用同一个User类则可以设定校验分组,通过分组校验可以对每处的校验个性化。
        需求:用户新增提交只校验用户名称长度
        定义分组:
            分组就是一个标识,这里定义一个接口,接口里面啥也没有:        

            public interface ValidGroup1 {
            }
            public interface ValidGroup2 { 
            }

            指定分组校验:           

         public class User {
                private Integer userId;
                //这里指定分组ValidGroup1,此@Size校验只适用ValidGroup1校验
                @Size(min=1,max=30,message="{username.length.error}",groups={ValidGroup1.class})
                private String userName;
 
                //新增用户
                @RequestMapping("/add")
                public String add(@Validated(value={ValidGroup1.class}) User user,BindingResult result,
                   Model model)throws Exception {
                在@Validated中添加value={ValidGroup1.class}表示商品修改使用了ValidGroup1分组校验规则,
                也可以指定多个分组中间用逗号分隔,@Validated(value={ValidGroup1.class,ValidGroup2.class })
 

    1.3校验注解
    
        @Null   被注释的元素必须为 null  
        @NotNull    被注释的元素必须不为 null  
        @AssertTrue     被注释的元素必须为 true  
        @AssertFalse    被注释的元素必须为 false  
        @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值  
        @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值   
        @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值  
        @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值  
        @Size(max=, min=)   被注释的元素的大小必须在指定的范围内  
        @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内  
        @Past   被注释的元素必须是一个过去的日期  
        @Future     被注释的元素必须是一个将来的日期  
        @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式  
        @NotBlank(message =)   验证字符串非null,且长度必须大于0  
        @Email  被注释的元素必须是电子邮箱地址  
        @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内  
        @NotEmpty   被注释的字符串的必须非空   
        @Range(min=,max=,message=)  被注释的元素必须在合适的范围内

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/82701633