团队校验用法:ValidatorUtils.validateEntity(req,AddGroup.class)
请不要问我为啥选这种方法?答:人情世故
一、问题
1、如下图,内嵌对象校验不生效。
2、Subject可为空,但如果不为空,需要对其进行校验
二、难点
1、@Valid注解可以对内嵌对象生效,但无法添加"groups = AddGroup.class"。
2、注解的技术线,固定了。为啥固定了?答:人情世故
三、解决方案
创建一个新的内部对象扫描注解
注解代码:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.FIELD})
@Constraint(validatedBy = InnerValidator.class)
public @interface InnerValid {
String message() default "custom valid fail";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
校验器代码:
注意:ParamException是ValidatorUtils.validateEntity(req,AddGroup.class) 中抛出的异常
@Slf4j
public class InnerValidator implements ConstraintValidator<InnerValid, Object> {
@Override
public boolean isValid(Object object, ConstraintValidatorContext context) {
if (null == object){
return true;
}
// 校验
// fixme 校验分组策略是写死的
try {
ValidatorUtils.validateEntity(object, AddGroup.class);
}catch (ParamException e){
String message = e.getMessage();
// 设置异常消息
context.buildConstraintViolationWithTemplate(message)
.addConstraintViolation();
return false;
}
return true;
}
}
用法:
四、依旧存在的问题
不够灵活且写死,如下图,若那位找到解决方案请评论留言,感谢
五、支持与期望
参考的博客:参考博客
期望:若有更好的解决方案请留言,感谢