使用场景
在项目开发过程中,数据校验时必不可少的环节,有效的校验方式可以提高开发效率、增强代码可读和可维护性,项目开发中,我使用最多的校验方式是使用注解@Valid
,但是这种方式往往只是在controller
层对接收表单传递过来的参数进行校验,那么当我们想要在任何地方校验一个对象的数据是否合法,应该怎么实现呢,下面是具体的实现方法。
实现步骤
- 在需要校验的实体类中添加注解标注
- 在需要校验的地方使用
javax.validation.Validator
进行校验
示例代码
需要校验的实体类示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| public class ValidEntity {
private String officeName;
@NotBlank(message = "县(市、新区)不能为空") private String county;
@NotBlank(message = "户主姓名不能为空") private String householderName;
@IDCardValidate @NotBlank(message = "户主身份证不能为空") private String householderIdCard;
@NotBlank(message = "所属项目年度不能为空") private String year;
@NotBlank(message = "是否应拆除不能为空") private String isDemolished;
@NotBlank(message = "是否已拆除不能为空") private String isConfirmDemolished;
private BigDecimal demolishedArea;
@NotBlank(message = "是否已复垦复绿不能为空") private String isConfirmReclaimed;
private BigDecimal reclaimedArea; }
|
校验数据合法性
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class ValidTest { @Autowired private Validator validator; public void validatorTest() { ValidEntity validEntity = new ValidEntity(); Set<ConstraintViolation<ValidEntity>> violationSet = validator.validate(validEntity); for (ConstraintViolation<ValidEntity> violation : violationSet) { System.out.println(violation.getMessage()); } } }
|
结语
至此,对实体数据的合法性校验就完成了,其中比较核心的两个类的完整限定名如下:
javax.validation.ConstraintViolation
javax.validation.Validator