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;
}
}
처럼 보이게하는거야?
세터와 붙어 있어야합니까? 당신의 예에서
왜 엔진의 유효성을 검사하는 동안 값을 변경하겠습니까? 사례에 대한 자세한 정보를 설명해 주시겠습니까? –
사실 내 원래의 관심사는 XML로 정렬하기 전이나 DB에 유지하기 전에 유효한 양식 (접힌/정규화 된)으로 값을 유지하는 것입니다. –
글쎄, 입력 데이터의 "유효한 형식"을 자동으로 알아낼 수 있다면 데이터가 데이터베이스에 저장되기 전에 setter를 사용하는 것이 가능합니다. 유효성 확인 프레임 워크의 주요 용도는 비즈니스 논리 코드를 복잡하게하지 않고 자동으로 수정할 수없는 데이터의 유효성을 검사하는 것입니다. 또한 유효성 검사 프레임 워크를 사용하면 테스트 할 수있는 장치에 유효성 검사 논리를 작성할 수 있습니다. –