유효성 검사 클래스를 내부 클래스로 사용하여 첫 번째 사용자 지정 유효성 검사 주석을 만들었습니다. 은 다음과 같습니다빈 유효성 검사 메시지의 일부로 서식 지정 (문자열) 배열
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {OneOfGroupNotNull.Validator.class})
@Documented
public @interface OneOfGroupNotNull {
// custom annotation properties
String[] fields();
// required by JSR-303
String message() default "One of group must be not null. {fields}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
public class Validator implements ConstraintValidator<OneOfGroupNotNull, Object> {
private String[] fields;
@Override
public boolean isValid(Object bean, ConstraintValidatorContext cvc) {
int countNotNull = 0;
for (String field : fields) {
try {
String property = BeanUtils.getProperty(bean, field);
if (property != null) {
countNotNull++;
}
} catch (Exception ex) {
throw new RuntimeException("Validation for field " + field + " of type " + bean.getClass()+ " raised exception.", ex);
}
}
return countNotNull == 1;
}
@Override
public void initialize(OneOfGroupNotNull a) {
fields = a.fields();
}
}
}
같이 보일 수도 있습니다 검사기로 주석되는 빈 클래스 :
@OneOfGroupNotNull(fields = {"a", "b", "c"})
public interface MyBean {
String getA();
Rarity getB();
Boolean getC();
}
문제는 내가 문자열 배열 "필드를 포맷 할 수있는 방법을 찾을 수 있다는 것입니다 ". to 문자열 메소드를 사용하면 다음과 같은 결과를 얻을 수 있습니다 : 그룹 중 하나가 null이 아니어야합니다. [Ljava.lang.String는, 당신은 String
에 String[]
에서 fields
의 유형을 변경 한 경우 157d954
니스! 고맙습니다! – realsim