JSR303的数据校验-Hibernate Validator方式实现
1.什么是JSR303?
JSR303是java为bean数据合法性校验所提供的一个标准规范,叫做Bean Validation.
Bean Validation是一个运行时的数据校验框架,在验证之后验证的错误信息会被马上返回。
2.实现方式:Hibernate Validator
3.JSR303定义了一套可以标注在成员变量、属性方法上的校验注解。
@Null 验证对象是否为空
@NotNull 验证对象是否不为空
@AssertTrue 验证Boolean对象是否为true
@AssertFalse 验证Boolean对象是否为false
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符 串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符 串表示.小数存在精度
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
4.Hibernate Validator是JSR303的一个参考实现,除了支持所有标准的校验注解之外,它还拓展了如下注解:
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格
@URL 验证是否是合法的url
@Email 验证是否是合法的邮件地址
@CreditCardNumber 验证是否是合法的信用卡好吗
@Length(min=, max=) 验证字符串的长度必须在指定的范围内
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.用于array、collection、map、string
@Range(min,max,message) 验证属性值必须在合适的范围内
5.接下来做一个JSR303的测试
5.1新建一个项目,导入springmvc所需的jar包,编写web.xml和springmvc-config.xml
<!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- spring可以自动去扫描base-package下面的包或者子包下面的java类 如果扫描到有spring相关注解的类,则吧这个类注册为spring的bean --> <context:component-scan base-package="com.dj.controller" /> <!-- 默认装配 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix"> <value>/</value> </property> <!-- 后缀 --> <property name="suffix"> <value>.jsp</value> </property> </bean>
5.2因为使用的是hibernate validator的实现,所以要导入所需的jar包,版本是5.4.1如图所示。
5.3编写一个用户注册的实体类
@NotBlank(message="登录名不能为空") private String username; @NotBlank(message="密码不能为空") @Length(min=6,max=18,message="密码长度必须在6~18位之间") private String password; @Email(message="邮箱格式不正确") private String email; @Pattern(regexp="[1][3|4|5|7|8][0-9]{9}",message="手机号码格式不正确") private String phone//省略get、set方法
5.4编写一个controller
@RequestMapping(value="/{pagename}") public String page(@PathVariable String pagename,Model model){ User user = new User(); model.addAttribute("user",user); return pagename; } //数据校验使用@valid,后面跟着errors对象保存校验信息 @RequestMapping(value="/test") public String regist(@Valid @ModelAttribute User user,Errors errors,Model model){ if(errors.hasErrors()){ return "regist"; } model.addAttribute("user",user); return "success"; }
5.5编写注册页面
<form:form modelAttribute="user" action="test" method="post"> 用户名:<form:input path="username"/><span><form:errors path="username" cssStyle="color:red"/></span><br> 密码:<form:input path="password"/><span><form:errors path="password" cssStyle="color:red"/></span><br> 邮箱:<form:input path="email"/><span><form:errors path="email" cssStyle="color:red"/></span><br> 手机号:<form:input path="phone"/><span><form:errors path="phone" cssStyle="color:red"/></span><br> <input type="submit" value="注册"> </form:form>
5.6编写注册成功页面显示注册信息
用户名:${user.username }<br> 密码:${user.password }<br> 邮箱:${user.email }<br> 手机号:${user.phone }<br>
5.7测试结果
源码下载地址 https://files.cnblogs.com/files/dj-blog/JSR03Test.zip