是否可以訪問字段值,其中的字段名稱在描述類中另一個字段的註釋中描述。如何訪問註釋屬性中描述的字段
例如:
@Entity
public class User {
@NotBlank
private String password;
@Match(field = "password")
private String passwordConfirmation;
}
譯註:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface Match {
String message() default "{}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String field();
}
現在,是有可能從類用戶訪問現場密碼ConstraintValidator implementaion類?
編輯:
我寫了這樣的事情:
public class MatchValidator implements ConstraintValidator<Match, Object> {
private String mainField;
private String secondField;
private Class clazz;
@Override
public void initialize(final Match match) {
clazz = User.class;
final Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Match.class)) {
mainField = field.getName();
}
}
secondField = match.field();
}
@Override
public boolean isValid(final Object value, final ConstraintValidatorContext constraintValidatorContext) {
try {
Object o; //Now how to get the User entity instance?
final Object firstObj = BeanUtils.getProperty(o, mainField);
final Object secondObj = BeanUtils.getProperty(o, secondField);
return firstObj == null && secondObj == null || firstObj != null && firstObj.equals(secondObj);
} catch (final Exception ignore) {
ignore.printStackTrace();
}
return true;
}
}
現在的問題是如何才能得到用戶對象實例和比較字段的值?
的[?是否可以讀取Java中的註解的值(http://stackoverflow.com/q/4296910/2078908) – ursa
@ursa感謝提示可能的複製,幫助我很多。但現在我被困在另一個問題上,請參閱編輯。 – zach
@zach你有沒有這個物體? 'isValid'方法的參數'value'。 – Jesper