springMvc校验(12)

来源:互联网 发布:linux init 1 编辑:程序博客网 时间:2024/06/09 14:27

前记:这是很早之前自学学习spingMvc时的笔记,内容比较基础,适合新手,内容基本是来自网络,如有雷同,敬请谅解!

 springMvc校验

  校验理解

项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

服务端校验:

         控制层conroller:校验页面请求的参数的合法性。

                    在服务端控制层conroller校验,

                   不区分客户端类型(浏览器、手机客户端、远程调用)

         业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。

         持久层dao:一般是不校验的。

  springMvc校验需求

springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。

校验思路:

         页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。

所需jar 包:

  

 springMvc校验的实现

 配置校验器

 方式一:

    配置的校验器validator往往会配置校验失败的错误信息来源,springMvc设置了自定义的校验错误信息配置文件。编写好此文件,配置、注入即可。

方式二:

<!-- 自定义webBinder -->

    <beanid="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">

       <property name="validator"ref="validator"/>

    </bean>

<!-- 注解适配器 -->

    <bean  class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

       <property name="webBindingInitializer"ref="customBinder"></property>

    </bean>

 校验器注入到处理器适配器中


说明:阴影部分即是校验器的注入配置。

     利用注解驱动的属性validator实现校验器的注入。

 在pojo中添加校验规则

 

注:添加校验规则的事例中,@Size里的属性message的值用“{ }”的原因是校验的出错信息读取了专门存放错误信息的配置文件(xx.properties文件)

 存放错误信息的配置文件

我们这里把此配置文件起名为:

          CustomValidationMessages.properties

(当然可以取任意名字,这是自定义的文件,只要是以.properties结尾的文件就行。)

在CustomValidationMessages.properties配置校验错误信息:


注:此处的显示的两个校验错误信息,正好用在了添加校验规则之中

捕获校验错误信息

以上内容配置好以后,程序运行过程中,一旦客户端传过来的参数没用通过校验,就需要把错误信息传送给客户端,这时用到了@Validated注解和BindingResult类,用来捕获校验的错误信息

 

//在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息

   //注意:@ValidatedBindingResultbindingResult是配对出现,并且形参顺序是固定的(一前一后)。

 页面显示校验错误信息

捕获了校验的错误信息之后,就需要把错误信息传到页面,以用来提示用户。

如下例所示:其实很简单,只要把错误信息传到页面即可。

           BindingResult中调用getAllErrors()方法获得所有的错误信息集合,然后放到数据模型之中,就可传到页面。

 

关于页面怎样显示校验错误信息,视项目本身的效果而定。

利用jstl表达式的简单显示如下:


  分组校验

   需求点

在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法需要不同的校验。

解决方法:

定义多个校验分组(其实是一个java接口),分组中定义有哪些规则

每个controller方法使用不同的校验分组

 校验分组(定义一个接口)

校验分组就是一个定义接口的过程,多个分组就定义多个接口,一个接口代表一组。

 

  在校验规则中添加分组

在pojo的校验规则@Size中,利用groups属性设置此校验属于哪个分组,groups可以定义多个分组,也就是说一个校验规则可以多个分组使用。

 

 在controller中使用分组的校验

具体的分组使用是在controller类对应的方法中使用。



事例中的阴影部分可以看出:分组是在@Validated中进行,利用value属性进行分组。

  校验规则的注解

@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=)  被注释的元素必须符合指定的正则表达式  

Hibernate Validator 附加的constraint  

@NotBlank(message =)   验证字符串非null,且长度必须大于0  

@Email 被注释的元素必须是电子邮箱地址  

@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内  

@NotEmpty  被注释的字符串的必须非空  

@Range(min=,max=,message=)  被注释的元素必须在合适的范围内

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 工程干完不给签合同怎么办 寄存密码纸丢了怎么办 超市柜子纸丢了怎么办 楼下有污水井味道怎么办 孕妇闻到了烧垃圾怎么办 楼下9米垃圾房怎么办 在工厂上班得了职业病怎么办 自来水被农药水污染了怎么办 雾霾天头疼恶心怎么办? 夫妻住宾馆一个没有身份证怎么办 医保报销后认定工伤怎么办 结肠癌术后复查有息肉怎么办 无蒂息肉恶变要怎么办 贤者时间很长怎么办 鸡吃了酒米醉了怎么办 自填脂肪乳房脂肪液化怎么办 中国人在外国遇到危险怎么办 dnf刷图卡住了怎么办 dbf深渊怪卡住了怎么办 dnf86级没任务了怎么办 dnf二觉任务没了怎么办 脚趾甲变空向上翘怎么办 汽油车加了一点柴油怎么办 柴油车辆环保检测功率不足怎么办 加95加错一次92怎么办 新车95加错92油怎么办 加不到95号汽油怎么办 去新疆没95号油怎么办 黄龙300加了92怎么办 gla错加92号油 怎么办 95和98混加了怎么办 沥青车可以停在居民区怎么办 汽油进到眼睛了怎么办 汽油进了眼睛里怎么办 眼睛里面进了汽油怎么办 脱硫塔里的二氧化硫高怎么办 恐怖黎明铁匠选错怎么办 堡垒之夜草变色怎么办 火柴没有擦的了怎么办 乙醚倒进下水道了怎么办 乙醚和水不分层怎么办