JSR303是javaEE6中的一个子规范:Bean Validation。官方实现是HibernateValidatior。校验:

使用springmvc 的validate机制,需要引入validate-api.jar,slf4j-api-1.7.2.jar包.如果仅加入此包,尽管不报错,但不能执行校验。

因为springmvc仅仅只是支持JSR303 Bean Validation定义的校验规范,为此设置了接口,实现需要具体的类来实现。

常用实体类有 hibernate-validator-5.2.4.Final.jar 可对pojo对象进行校验,也可独立于hibernate-orm单独使用。。

添加自驱动即可加载。

<mvc:annotation-driven />

// https://mvnrepository.com/artifact/javax.validation/validation-api
compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>

JSR303属性内容的可加校验注解:

@Null       验证对象是否为null

@NotNull      验证对象是否不为null, 无法查检长度为0的字符串

@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.

@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查

@AssertTrue     验证 Boolean 对象是否为 true  

@AssertFalse    验证 Boolean 对象是否为 false  

长度检查

@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  

@Length(min=, max=)
验证字符串的长度是否在给定的范围之内,包含两端 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式的规则 数值检查:建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null @Min 验证 Number 和 String 对象是否大等于指定的值 @Max 验证 Number 和 String 对象是否小等于指定的值 @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 @Digits 验证 Number 和 String 的构成是否合法 @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 @Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. @Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage; @Valid递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) @CreditCardNumber信用卡验证 @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 @ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=)

对象类添加校验:

	/** appId **/
@Digits(fraction = 0, integer = 0, message="版本Id仅允许输入数字")
private Long appId; /** app类型. */
@NotNull(message="请选择应用类型")
@Pattern(regexp = "^debug|release$", message="应用类型仅可选择debug或release")
private String appType; /** app适用平台. */
@NotNull(message="请选择适用平台")
@Pattern(regexp="^android|ios$", message="应用平台仅可选择android或ios")
private String appPlatform; /** app名. */
@NotNull(message="请填写版本名称")
@Size(max=15, message="版本名称请控制在{1}字以内")
private String appName; /** 版本Code. */
@NotNull(message="请填写版本编号")
@Digits(fraction = 0, integer = 0, message="版本编码仅允许输入数字")
private Long versionCode; /** 版本Name. */
@NotNull(message="请填写版本名称")
@Size(max=15, message="版本名称请控制在{1}字以内")
private String versionName; /** 版本描述Description. */
@NotNull(message="请填写版本描述")
@Size(max=1000, message="版本描述请控制在{1}字以内")
private String versionDescription;

如果使用{1}这不起作用,就改为{min}   {max}的形式

触发校验:

(@Valid MhrAppVersionDTO dto, BindingResult result)

判断及错误采集:

if(result.hasErrors()) {
// objectError 中 objectName 和defaultMessage属性比较有用
List<ObjectError> errorList = result.getAllErrors();
}

还可以手动触发校验,需要编写校验Utils来实现:

参考这篇文章:https://blog.csdn.net/jamesge2010/article/details/53610162

参考文章: springMVC中两种validation的简单使用(https://blog.csdn.net/lixiaoxiong55/article/details/51670882)

springmvc @valid的更多相关文章

  1. 【问题记录】springMVC @Valid使用不生效问题

    问题描述 在网上找到如何使用@Valid注解后,就把用到的配置和jar包加上,然后测试发现一直不生效.下面是配置及解决方法 配置 1.引入依赖 2.添加相应的配置(springmvc配置文件) < ...

  2. springMVC @Valid不起作用

    springmvc使用JSR-303进行表单验证不生效的问题 spring只是支持jsr-303验证,但却不提供jsr-303的实现,文档中提及了需要导入类如hibernate-validator等j ...

  3. SpringMVC @Valid,@RequestBody,@RequestParam标注参数时,进行Postman测试

    @Valid(post请求) 可与@RequestBody一起使用 > (@RequestBody @Valid User user) @RequestBody(post请求) 这里的requi ...

  4. springmvc @Valid 接收实体类时出现bean为null的问题

    这是因为传到后端之后,全部以全小写形式处理了 所以前端也需要把name设置为全小写,否则后端不识别,导致接收不到,导致为null

  5. SpringMVC 使用JSR-303进行校验 @Valid

    注意:1 public String save(@ModelAttribute("house") @Valid House entity, BindingResult result ...

  6. 秒杀系统-web

    秒杀系统Web层主要涉及前端交互设计.Restful:url满足Restful设计规范.Spring MVC.bootstrap+jquery这四个方面的开发.秒杀系统的前端交互流程设计如下图6-3所 ...

  7. JAVA高并发秒杀API项目的学习笔记

    一步一步的搭建JAVA WEB项目,采用Maven构建,基于MYBatis+Spring+Spring MVC+Bootstrap技术的秒杀项目学习的视频:http://www.imooc.com/l ...

  8. @Valid springMVC bean校验不起作用及如何统一处理校验

    SpringMVC 使用JSR-303进行校验 @Valid 使用注解 一.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-vali ...

  9. SpringMvc中的校验框架@valid和@validation的概念及相关使用 和BindingResult bindingResult

    1.比较 @Valid是使用hibernate validation的时候使用 @Validated 是只用spring  Validator 校验机制使用\ 2.实现 其中,@valid,java的 ...

随机推荐

  1. day8 python学习 集合 深浅拷贝

    1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...

  2. Windows环境下用jwplayer+Nginx搭建视频点播服务器

    flv视频可以采用两种方式发布: 一.普通的HTTP下载方式 二.基于Flash Media Server或Red5服务器的rtmp/rtmpt流媒体方式. 多数知名视频网站都采用的是前一种方式. 两 ...

  3. FastAdmin 绑定的模块禁用路由

    为了安全,将后台入口隐藏. 这里出一个问题,因为装了 CMS 插件,使用入口登录后显示的是 CMS 的首页. 这个问题已经修复. https://gitee.com/karson/fastadmin/ ...

  4. hadoop之 node manager起不来, 执行mapreduce 程序hang住

    现象: node manager起不来, 执行mapreduce 程序hang住 namenode 进程状态查询[root@hadp-master sbin]# jps8608 ResourceMan ...

  5. POJ2411骨牌覆盖——状压dp

    题目:http://poj.org/problem?id=2411 状压dp.注意一下代码中标记的地方. #include<iostream> #include<cstdio> ...

  6. Openwrt 3g模块

    支持Huawei E367 一.编译选项的选择 都选上 都选上 Network目录下 Utiles Luci 二.USB连接3G模块时,显示如下,表示成功 三.没找到:

  7. PAT 乙级 1037 在霍格沃茨找零钱(20)C++版

    1037. 在霍格沃茨找零钱(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果你是哈利·波特迷,你会知 ...

  8. fiddler基础功能介绍

  9. 用HTML5播放IPCamera视频

    HTML5增加了vedio标签,能直接播放视频,但是播放的格式是有限的. 这里将IPCamera的视频转换OGG格式,再通过HTML5网页播放,播放还是很清晰的.IPCamera要支持RTSP等视频流 ...

  10. Spark学习笔记6:Spark调优与调试

    1.使用Sparkconf配置Spark 对Spark进行性能调优,通常就是修改Spark应用的运行时配置选项. Spark中最主要的配置机制通过SparkConf类对Spark进行配置,当创建出一个 ...