在JSR-303中,有什麼方法在驗證時更改值?JSR-303 Bean驗證在驗證時更改值
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;
}
}
有什麼辦法/前或同時驗證驗證更改值驗證?
我是否必須堅持使用setter?
請問爲什麼要在引擎驗證時更改值?你能否描述你的案例的更多信息? – 2012-03-14 09:14:23
實際上,我最初的擔心是在編組爲XML之前或在保存到數據庫之前將值保留爲有效表單(摺疊/標準化)。 – 2012-03-14 10:48:34
那麼,如果你可以自動計算輸入數據的「有效形式」,那麼在數據被保存到數據庫之前可以使用setter。驗證框架的主要用途是驗證無法自動糾正的數據,而不會使業務邏輯代碼複雜化。此外,驗證框架讓您只需在可測試單元中編寫驗證邏輯即可。 – 2012-03-15 02:18:50