使用@Valid注解去校验的时候,一般我们在controller的方法传参时就加上注解,但是在业务时有时有的字段需要校验,有时有的字段又不需要校验,又是使用同一个接口,同一个对象,很难区别开,如果在方法上加@Valid 注解就很难区分了,所以可以在业务中手动校验,分别创建两个校验的对象,根据业务配合BeanUtils.copyProperties() 将接收的表单对象复制到相应的类,再分别校验。
//手动验证
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Object>> constraintViolations = validator
.validate(demandRequest);//验证某个对象,,其实也可以只验证其中的某一个属性的
Iterator<ConstraintViolation<Object>> iter = constraintViolations
.iterator();
List<String> error = new ArrayList<>();
while (iter.hasNext()) {
String message = iter.next().getMessage();
error.add(message);
}
if (error.size() > 0) {
throw new ScInternalExceptionV2(ScDemandExceptionEnum500.PARAMETER_ERROR, error.get(0));
}
评论区