我想通过我的同伴Java黑客来解决这个问题。看看这对你来说是否足够理智。可能有更好的方法来做到这一点,但我在想:我可以编写一个双用途的ConstraintValidator,它可以在传递给方法时验证字段(某种对象),也可以用于验证实例仍在使用注释的那个上下文之外的那个对象?我提出了以下方法。告诉我你对它的想法。使用案例:
...
@POST
public Response retrieveSomething(@Encoded @IsAParamValid MyParamObject myParamObject)
{
...
}
我也希望能够在代码中的其他地方执行此操作:
IsAParamValidValidator.validate(myParamObject);
没有重复逻辑来进行验证。这里的关键是我想要在方法调用中使用@IsAParamValid的自动异常生成服务。
答案 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;
}
}
好的,你们都觉得怎么样?