在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