博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc @valid
阅读量:6986 次
发布时间:2019-06-27

本文共 3286 字,大约阅读时间需要 10 分钟。

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

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

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

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

添加自驱动即可加载。

<mvc:annotation-driven />

// https://mvnrepository.com/artifact/javax.validation/validation-apicompile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
javax.validation
validation-api
2.0.1.Final

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;
View Code

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

 

触发校验:

(@Valid MhrAppVersionDTO dto, BindingResult result)

判断及错误采集:

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

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

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

 

 

 

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

转载于:https://www.cnblogs.com/DennyZhao/p/8716293.html

你可能感兴趣的文章
iOS之传值
查看>>
技术blog 迁移
查看>>
linux 定时器怎么用? crontab 基础
查看>>
React Native - Image
查看>>
Docker和宿主机操作系统文件目录互相隔离的实现原理
查看>>
小程序踩坑系列一
查看>>
探索webpack热更新对代码打包结果的影响(二)
查看>>
微信小程序_豆瓣电影
查看>>
记一次网络模块的小规模重构
查看>>
FMI-人工智能&大数据高峰论坛(深圳站)
查看>>
区块链简单研读笔记
查看>>
为什么 scrum 开发人员是一个 T-形的人 ?
查看>>
使用 CODING 进行 Spring Boot 项目的集成
查看>>
centOS上docker 的简单使用
查看>>
web前端性能优化总结
查看>>
pandas 修改 DataFrame 列名
查看>>
《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
查看>>
leetcode409.Longest Palindrome
查看>>
以太坊客户端Ethereum Wallet与Geth区别简介
查看>>
蚂蚁区块链平台BaaS技术解析与实践
查看>>