Validation 使用ConstraintValidator验证对象

Validation 使用ConstraintValidator验证对象,validation,annotations,Validation,Annotations,我想让我的Java黑客同事们来看看。看看这对你来说是否足够理智。也许有更好的方法可以做到这一点,但我在想:我是否可以编写一个双重用途的ConstraintValidator,它可以在字段(某种类型的对象)被传递到方法时进行验证,并且还可以用于在仍然使用注释的情况下在该上下文之外验证该对象的实例?我提出了以下方法。让我知道你对它的看法。用例: ... @POST public Response retrieveSomething(@Encoded @IsAParamValid MyParamObj

我想让我的Java黑客同事们来看看。看看这对你来说是否足够理智。也许有更好的方法可以做到这一点,但我在想:我是否可以编写一个双重用途的ConstraintValidator,它可以在字段(某种类型的对象)被传递到方法时进行验证,并且还可以用于在仍然使用注释的情况下在该上下文之外验证该对象的实例?我提出了以下方法。让我知道你对它的看法。用例:

...
@POST
public Response retrieveSomething(@Encoded @IsAParamValid MyParamObject myParamObject)
{
  ...
}
我还希望能够在代码中的其他地方执行此操作:

IsAParamValidValidator.validate(myParamObject);

无需重复逻辑即可进行验证。这里的关键是我想要自动生成异常的服务,在方法调用中使用@isParamValid可以让我受益。

我的想法是一种两全其美的方法:

我的注释类:

@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 {};
}
@Target({ElementType.FIELD,ElementType.PARAMETER})
@保留(值=RetentionPolicy.RUNTIME)
@约束(validatedBy={isParamValidValidator.class})
@记录
public@interface无效
{
String message()默认值“参数无效”;
类[]组()默认值{};

ClassScratch这个…当我把它作为一个独立的验证器使用时,我没有自动抛出错误。现在…有人能告诉我如何得到它吗?
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;
  }

}