使用ConstraintValidator验证对象

时间:2018-06-04 23:14:11

标签: validation annotations

我想通过我的同伴Java黑客来解决这个问题。看看这对你来说是否足够理智。可能有更好的方法来做到这一点,但我在想:我可以编写一个双用途的ConstraintValidator,它可以在传递给方法时验证字段(某种对象),也可以用于验证实例仍在使用注释的那个上下文之外的那个对象?我提出了以下方法。告诉我你对它的想法。使用案例:

...
@POST
public Response retrieveSomething(@Encoded @IsAParamValid MyParamObject myParamObject)
{
  ...
}

我也希望能够在代码中的其他地方执行此操作:

IsAParamValidValidator.validate(myParamObject);

没有重复逻辑来进行验证。这里的关键是我想要在方法调用中使用@IsAParamValid的自动异常生成服务。

1 个答案:

答案 0 :(得分:0)

我想要找到两全其美的方法:

我的注释类:

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {IsAParamValidValidator.class})
@Documented
public @interface IsAParamValid
{
 String message() default "The param was invalid";
 Class<?>[] groups() default {};
 Class<? extends Payload>[] payload() default {};
}

我的验证员类:

public class IsAParamValidValidator implements ConstraintValidator<IsAParamValid, MyParamObject>
{
  public static void validate(@IsAParamValid MyParamObject myParamObject) {
  }

  @Override
  public void initialize(IsAParamValid isAParamValid) {
  }

  @Override
  public boolean isValid(MyParamObject myParamObject, ConstraintValidatorContext constraintValidatorContext)
  {
    // do the check
    boolean bResult = ... whatever ...
    return bResult;
  }

}

好的,你们都觉得怎么样?