0

カスタム制約には次のコードがあります。

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD })
@Constraint(validatedBy = MinMaxValidator.class)
public @interface CheckMinMax{

    String message() default "MinMax constraint has been violated";

    Class<? extends Payload>[] payload() default {};

    Class<?>[] groups() default {};

    int min() default 1;

    int max() default 10;
}

そして Validator クラス:

public class MinMaxValidator は ConstraintValidator を実装します {

int max;
int min;

@Override
public void initialize(CheckMinMax annotation) {
    max = annotation.max();
    min = annotation.min();

}

@Override
public boolean isValid(Integer value, ConstraintValidatorContext arg1) {
    if (value < min || value > max)
        return false;
    return true;
}

}

今、エンティティビーンに注釈を付けて、次のコードで制約に違反するオブジェクトを渡そうとすると:

validator.validate(obj);

動作しますが、エラー メッセージは表示されません。デフォルトのエラーメッセージ「MinMax 制約に違反しています」を出力するにはどうすればよいですか?

どうも

4

2 に答える 2

1

Validator.validate()メソッドは ConstraintValidationException をスローしていません。を返しますSet<ConstraintViolation>。制約違反がある場合は、例外をスローする責任があります。

典型的な使用パターンは次のとおりです。

Set<ConstraintViolation> cvs = validator.validate(obj);
if(cvs.size() > 0){
  throw new ConstraintViolationException(cvs);
}
于 2012-04-03T21:35:05.010 に答える
0

Annotation で定義されているエラー メッセージを出力する方法を見つけました。

Set<ConstraintViolation<TypeOfObj> cvs = validator.validate(obj);
for(ConstraintViolation<TypeOfObj> violation : cvs) 
{
    logger.info(violation.getMessage());
}

乾杯

于 2012-04-05T22:51:04.570 に答える