В JSR-303 есть ли способ изменить значение при проверке?
public class MyEntity {
public String getName() {
return name;
}
// is it true that JSF/JAXB/JPA will always use this setter method?
public void setName(final String name) {
if (name == null) {
throw new NullPointerException("null name");
}
final String collapsed = new CollapsedStringAdapter().unmarshal(name);
if (collapsed.length() < NAME_SIZE_MIN) {
throw new IllegalArgumentException("too short");
}
if (collapsed.length() > NAME_SIZE_MAX) {
throw new IllegalArgumentException("too long");
}
this.name = collapsed;
}
@NotNull
@Size(min = 1, max = 40)
@CollapsedStringSize(min = 1, max = 40) // xs:token
private String name;
@NotNull
@Size(min = 0, max = 255)
@NormalizedStringSize(min = 0, max = 255) // xs:normalizedString
private String description;
}
Скажем, я собираюсь сделать собственный валидатор, похожий на
@Constraint(validatedBy = CollapsedStringSizeValidator.class)
public @interface CollapsedStringSize {
int min() default 0;
int max() default Integer.MAX_VALUE;
}
public class CollapsedStringSizeValidator
implements ConstraintValidator<CollapsedStringSize, String> {
@Override
public boolean isValid(String object,
ConstraintValidatorContext constraintContext) {
if (object == null) {
return true;
}
final String collapsed = new CollapsedStringAdapter().unmarshal(object);
// how can I get the min/mix anyway?
return collapsed.length() >= min && collapsed.length() <= max;
}
}
Есть ли способ изменить значение до или во время валидации / валидации валидатора?
Должен ли я застрять с сеттером?