一、前言
在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间、成本、质量的博弈中必然会落后。所以把校验层抽象出来是必然的结果,下面说下几种解决方案。
二、几种解决方案
1、struts2的valid可以通过配置xml,xml中描述规则和返回的信息,这种方式比较麻烦、开发效率低,不推荐
2、validation bean 是基于JSR-303标准开发出来的,使用注解方式实现,及其方便,但是这只是一个接口,没有具体实现.Hibernate Validator是一个hibernate独立的包,可以直接引用,他实现了validation bean同时有做了扩展,比较强大 ,实现图如下:
3、oval 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。可以使用纯 Java 语言、JavaScript 、Groovy 、BeanShell 等进行规则的编写,本次不过多讲解
三、bean validation 框架验证介绍
bean validation 包放在maven上维护,最新包的坐标如下:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
下载之后打开这个包,有个package叫constraints,里面放的就是验证的的注解:
下面开始用代码实践一下:
1、定义一个待验证的bean:Student.java
1 package com.shishang; 2 3 import javax.validation.constraints.*; 4 import java.io.Serializable; 5 import java.math.BigDecimal; 6 import java.util.Date; 7 8 public class Student implements Serializable { 9 10 11 @NotNull(message = "名字不能为空") 12 private String name; 13 14 @Size(min = 6,max = 30,message = "地址应该在6-30字符之间") 15 private String address; 16 17 @DecimalMax(value = "100.00",message = "体重有些超标哦") 18 @DecimalMin(value = "60.00",message = "多吃点饭吧") 19 private BigDecimal weight; 20 21 private String friendName; 22 @AssertTrue 23 private Boolean isHaveFriend(){ 24 return friendName != null?true:false; 25 } 26 27 @Future(message = "生日必须在当前实践之前") 28 private Date birthday; 29 30 @Pattern(regexp = "^(.+)@(.+)$",message = "邮箱的格式不合法") 31 private String email; 32 33 34 public String getName() { 35 return name; 36 } 37 38 public void setName(String name) { 39 this.name = name; 40 } 41 42 public String getAddress() { 43 return address; 44 } 45 46 public void setAddress(String address) { 47 this.address = address; 48 } 49 50 public BigDecimal getWeight() { 51 return weight; 52 } 53 54 public void setWeight(BigDecimal weight) { 55 this.weight = weight; 56 } 57 58 public String getFriendName() { 59 return friendName; 60 } 61 62 public void setFriendName(String friendName) { 63 this.friendName = friendName; 64 } 65 66 public Date getBirthday() { 67 return birthday; 68 } 69 70 public void setBirthday(Date birthday) { 71 this.birthday = birthday; 72 } 73 74 public String getEmail() { 75 return email; 76 } 77 78 public void setEmail(String email) { 79 this.email = email; 80 } 81 }