0
我有我需要在ConstraintValidation沒有得到應用到列表
@KeyValid
@Valid
protected List<KeyValue> keyValues;
運行一些驗證對象的名單,我必須爲它創造了以下注釋:
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = KeyValidator.class)
public @interface KeyValid{
String message() default "invalid_parameter_default_message";
String[] checks() default {};
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
這是我的驗證器:
public class KeyValidator implements ConstraintValidator<KeyValid, KeyValue> {
@Override
public void initialize(KeyValid keyValid) {
}
@Override
public boolean isValid(KeyValue keyValue, ConstraintValidatorContext constraintValidatorContext) {
return true;
}
}
我讀過的地方可以批量驗證集合,如果列表或地圖或者設置是通過定製約束註釋,那麼所有的集合中的元素的調用驗證,但上面的代碼引發以下錯誤
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'com.util.Validators.KeyValid' validating type 'java.util.List<com.model.KeyValue>'. Check configuration for 'keyValue'
不幸的是我現在被Java 7困住了,但是我沒有讀過關於參數聲明中的註釋。看起來不錯。但是有什麼辦法可以用Java 7做些什麼,而且我也不能直接將註釋添加到類中,因爲它是生成的源。 –
您可以使用Hibernate Validator API進行編程約束聲明,以將約束添加到「KeyValue」的類定義中。這樣你就不需要觸摸它的源代碼,只需通過'@ Valid'驗證列表即可。 – Gunnar