用Spring的朋友应该都很熟悉Validation,一个是Javax 一个是Hivernate里的,能很方便地对输入的参数进行校验,关于这两个框架的具体使用和原理介绍,不在这里详细介绍了。
平时使用都是直接基于Spring注解使用,很是方便。最近因为一个特殊的需求,需要在代码里手动对DTO进行校验一下,看了下源码,简单写了个工具类,适合手动对DTO类的参数进行校验。
源码如下:
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 |
import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import java.util.Set; public class FacadeInputValidator { private Validator validator; public FacadeInputValidator() { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); validator = factory.getValidator(); } public <T> Result validate(T t){ Set<ConstraintViolation<T>> violationSet = validator.validate(t); if(violationSet == null || violationSet.isEmpty()) return null; for(ConstraintViolation<T> violation : violationSet){ if(violation == null) continue; return ErrorCodes.ParamIllegal.result(violation.getPropertyPath()+""+violation.getMessage()); } return null; } } |
里面 ErrorCodes和Result是项目里封装的用于标准化输出接口的类。
使用的时候,只需要一行代码:
1 2 3 |
Result validate = new FacadeInputValidator().validate(dto); if (validate != null) return validate; |
还有一些复杂的,例如分组、或者自己实现一个注解代理等等,看后续需要再实现。
转载请注明:刘召考的博客 » javax.validation 手动校验DTO