1目的
减少校验代码,增加代码安全性
2.java bean 基础校验
步骤
第一步:引入依赖包
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.6.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
</dependency>
第二步:创建需要构建的实体类
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.GroupSequence;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;
@Data
public class UserInfo {
public interface LoginGroup{ }
public interface RegistGroup{}
@GroupSequence({LoginGroup.class,RegistGroup.class})
public interface Group{}
@NotNull(message = "用户ID不能为空", groups = LoginGroup.class)
private String userId;
@NotEmpty(message = "用户名不能为空")
private String userName;
@NotBlank(message = "用户密码不能为空")
@Length(min = 4,max = 10,message = "密码不能超过10位,,低于4位")
private String passWord;
@NotNull(message = "邮箱不能为空",groups = RegistGroup.class)
@Email(message = "请输入正确的邮箱地址")
private String email;
@Min(value = 16,message = "年龄不能小于16")
@Max(value = 80,message = "年龄不能大于80")
private Integer age;
private String phone;
@Past(message = "日期不能选择之前的日期")
private Date birthday;
@Size(min = 1,message = "集合不能少于1个人")
private List< @Valid UserInfo> friends;
}
第三步:构造需要验证的数据
userInfo = new UserInfo();
userInfo.setUserName(" ");
userInfo.setPassWord("111222");
userInfo.setEmail("aaa@aa");
userInfo.setAge(25);
Calendar calendar = Calendar.getInstance();
calendar.set(2018,1,1);
userInfo.setBirthday(calendar.getTime());
第四步:创建验证器,并进行验证
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<UserInfo>> sets = validator.validate(userInfo);
第五步:打印验证结果
set.forEach(item->{
System.out.println("打印结果是:"+item.getMessage());
});
总结
个人觉得基础校验已经满足日常的使用,对于方法的参数,和返回结果,构造函数参数校验都没有必要了。为啥呢?因为其实在入参之前就开始校验,或者再返回之前就开始校验即可。