SpringMVC 数据校验方法(必看篇)
数据校验在web应用里是非常重要的功能,尤其是在表单输入中。在这里采用hibernate-vapdator进行校验,该方法实现了jsr-303验证框架支持注解风格的验证。
一、导入jar包
若要实现数据校验功能,需要导入必要的jar包,主要包括以下几个:
classmate-1.3.1.jar
hibernate-vapdator-5.4.1.final.jar
hibernate-vapdator-annotation-processor-5.4.1.final.jar
hibernate-vapdator-cdi-5.4.1.final.jar
jboss-logging-3.3.0.final.jar
vapdation-api-1.1.0.final.jar
二、常用的校验注解
注解 | 功能 |
---|---|
@null | 验证对象是否为 null |
@notnull | 验证对象是否不为 null |
@asserttrue | 验证 boolean 对象是否为 true |
@asserttrue | 验证 boolean 对象是否为 false |
@max(value) | 验证 number 和 string 对象是否小于等于指定值 |
@min(value) | 验证 number 和 string 对象是否大于等于指定值 |
@decimalmax(value) | 验证注解的元素值小于等于 @decimalmax 指定的 value 值 |
@decimalmin(value) | 验证注解的元素值大于等于 @decimalmin 指定的 value 值 |
@digits(integer,fraction) | 验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction 指定小数精度 |
@size(min,max) | 验证对象长度是否在给定的范围内 |
@past | 验证 date 和 calendar 对象是否在当前时间之前 |
@future | 验证 date 和 calendar 对象是否在当前时间之后 |
@pattern | 验证 string 对象是否符合正则表达式的规则 |
@notblank | 检查字符串是不是 null,被 trim 的长度是否大于0,只对字符串,且会去掉前后空格 |
@url | 验证是否是合法的 url |
验证是否是合法的邮箱 | |
@creditcardnumber | 验证是否是合法的信用卡号 |
@length(min,max) | 验证字符串的长度必须在指定范围内 |
@notempty | 检查元素是否为 null 或 empty |
@range(min,max,message) | 验证属性值必须在合适的范围内 |
三、修改实体类
在类的属性上进行标注,如:
public class user { @notblank(message = "username can not be empty") private string username; @notblank(message = "password can not be blank") @length(min = 6, max = 16, message = "the length of the password must be between 6 and 16 bits") private string password; @range(min = 18, max = 60, message = "age must be between 18 and 60 years old") private integer age; @pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "please enter the correct format of the phone number") private string phone; @email(message = "please enter a valid email address") private string email; // other... }
四、修改相应的处理方法
@requestmapping(value = "/register") public string register(@valid @modelattribute("user") user user, errors errors,model model) { if(errors.haserrors()){ return "register"; } model.addattribute("user", user); return "success"; }
五、视图输出
校验之后,我们通常需要在表单的输入框后进行文字反馈:
<form:form modelattribute="user" method="post" action="register"> <fieldset> <legend>register</legend> <p> <label>name:</label> <form:input path="username" /> <form:errors path="username" cssstyle="color:red"/> </p> ... </fieldset> </form:form>
然而,有些时候并不推荐直接将错误信息写在注解的message属性里,这样不方便国际化。因此可以做以下几处修改:
1. 新建validatemessages.properties
username.not.blank = "username cannot be empty..." password.not.blank = "password cannot be empty" password.not.length = "password should be in 6-10" age.not.range = "age should be in 10-70" phone.not.pattern = "phone should be in format" email.not.format = "email should be in format"
2. 实体类中的注解使用相对引用
public class user { @notblank(message = "{username.not.blank}") private string username; @notblank(message = "{password.not.blank}") @length(min = 6, max = 10, message = "{password.not.length}") private string password; @range(min = 10, max = 70, message = "{age.not.range}") private integer age; @pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "{phone.not.pattern}") private string phone; @email(message = "{email.not.format}") private string email; // other... }
3. 修改配置文件
<!-- 默认的注解映射的支持 --> <mvc:annotation-driven validator="validator" conversion-service="conversion-service" /> <bean id="validator" class="org.springframework.validation.beanvalidation.localvalidatorfactorybean"> <property name="providerclass" value="org.hibernate.validator.hibernatevalidator"/> <!--不设置则默认为classpath下的 validationmessages.properties --> <property name="validationmessagesource" ref="validatemessagesource"/> </bean> <bean id="conversion-service" class="org.springframework.format.support.formattingconversionservicefactorybean" /> <bean id="validatemessagesource" class="org.springframework.context.support.reloadableresourcebundlemessagesource"> <property name="basename" value="classpath:validatemessages"/> <property name="fileencodings" value="utf-8"/> <property name="cacheseconds" value="120"/> </bean>
特别注意:value="classpath:validatemessages",文件名不加后缀!
至此,数据校验的整个过程就结束了。
最后还要特别强调的重点是:
视图中<form:form modelattribute="contentmodel" method="post">的modelattribute="xxx"后面的名称xxx必须与对应的@valid @modelattribute("xxx") 中的xxx名称一致,否则模型数据和错误信息都绑定不到。
<form:errors path="name"></form:errors>即会显示模型对应属性的错误信息,当path="*"时则显示模型全部属性的错误信息。
以上这篇springmvc 数据校验方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
推荐阅读