JSR 303 Bean 유효성 검사를 사용하는 경우 여기에 validation groups (groups
)을 사용할 수 있습니다.
두 개의 섹션이 들어있는이 사용자 입력이 있다고 가정합니다. 섹션이 활성화 또는 비활성화되었는지 나타내는 두 개의 부울입니다. 당신은 그룹에 대한 두 개의 인터페이스를 필요로
public class UserInput {
boolean sectionAEnabled;
boolean sectionBEnabled;
@NotNull(groups=SectionA.class)
String someSectionAInput;
@NotNull(groups=SectionA.class)
String someOtherSectionAInput;
@NotNull(groups=SectionB.class)
String someSectionBInput;
Getter and Setter
}
(물론 @NotNull
보다 더 유용한 주석을 사용할 수 있습니다). 그들은 마커로만 작동합니다.
public interface SectionA{}
public interface SectionB{}
Since Spring 3.1 유효성 검증을 트리거 컨트롤러 방법에 (대신 @Validate
의) 봄 @Validated
주석을 사용할 수 있습니다
@RequestMapping...
public void controllerMethod(
@Validated({SectionGroupA.class}) UserInput userInput,
BindingResult binding, ...){...}
봄 3.1 전에를 지정하는 방법이 없었습니다 (@Validated
이없고 @Validate
에 그룹 속성이 없기 때문에 유효성 검사에 사용 된 유효성 검사 그룹이므로 ha로 유효성 검사를 시작해야합니다. 작성된 코드 : 마녀 섹션에 의존하여 유효성 검사를 트리거하는 예제는 Spring 3.0에서 사용 가능합니다.
@RequestMapping...
public void controllerMethod(UserInput userInput,...){
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
List<Class<?>> groups = new ArrayList<Class<?>>();
groups.add(javax.validation.groups.Default.class); //Always validate default
if (userInput.isSectionAEnabled) {
groups.add(SectionA.class);
}
if (userInput.isSectionBEnabled) {
groups.add(SectionB.class);
}
Set<ConstraintViolation<UserInput>> validationResult =
validator.validate(userInput, groups.toArray(new Class[0]));
if(validationResult.isEmpty()) {
...
} else {
...
}
}
는
정말 좋은 제안 인 것 같습니다. DTO에있는 필드에이 방법을 적용하는 방법에 대해서 궁금합니다. 나는 콩/도메인 objecct에 존재하지 않지만 DTO에 존재하는 몇 가지 필드가 있고 그들에 대한 검증을 추가하고 싶다. – xyz
매우 클래스 인 Entity DTO, ...의 필드에이 javax.validation anntoation (NotNull, ...)을 넣을 수 있습니다. 위 예제에서 UserInput은 DTO 여야합니다 – Ralph