springmvc @valid

2018/04/04 11:28
阅读数 0

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

如果使用{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)

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部