예, 두 가지 방법이 있습니다
- 검사기 인터페이스 봄이는 동안 JSR 303은 새로운 2
- 이, 존재하지 않는 주로 봄에 사용 된 이전이다 빌드
JSR 303을 사용하는 것이 좋습니다. 제 생각에는 오래된 유효성 검사기를 사용해야하는 유일한 이유가 있습니다. 즉, 많은 교차 필드 검증이 필요한 경우입니다. JSR 303을 사용하려면 (예 : Hibernate-Validator (JSR 303의 기본 구현)) (Hibernate-Validator와 같은) 유효성 검사기 구현을 추가해야합니다. Validator는 Hibernate ORM이 아니며, 단지 관련이 있습니다.)
이것은 JPA와 약간 비슷합니다. 공통 중립적 인 사양 (javax.jpa/javax.validation)과 다른 공급자 구현 (예 : JPA의 경우 : EclipseLink 또는 Hibernate)
이 예제는 유효성을 테스트하는 예제입니다 (테스트의 목표는 te 당신은 단지 추가해야
public class NotEmptyTest {
public static class Demo {
@NotEmpty
String string;
public Demo(final String string) {
this.string = string;
}
}
@Test
public void testNotEmptysWithValid() {
/** given: a valid object */
Demo valid = new Demo("hallo Welt");
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
/** then there must not be any constraint violations */
AssertUtil.isEmpty(validator.validate(valid));
}
@Test
public void testNotEmptyInValid() {
/** given: an invalid object */
Demo valid = new Demo("");
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
/** then there must not be one constraint violation */
Set<ConstraintViolation<Demo>> result = validator.validate(valid);
AssertUtil.hasSize(1, result);
ConstraintViolation<Demo> firstItem = result.iterator().next();
Assert.assertEquals("{org.hibernate.validator.constraints.NotEmpty.message}",
firstItem.getMessageTemplate());
}
}
하지만, 스프링 MVC 컨트롤러에 훨씬 쉽게 : 성 검증 자체, 그러나 나는 어쨌든이 방법 유효성을 테스트하는 방법을 설명한다) 공통의 하나에 검사기를 변경 명령 개체의 매개 변수 @Valid
및 명령 개체의 매개 변수
@RequestMapping(method = RequestMethod.POST)
public ModelAndView create(@Valid UserCreateCommand userCreateCommand,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
//show form again
} else {
//create user and
//redirect To Show user
}
}
후 직접 BindingResult
매개 변수를 추가해야합니다 그리고 UserCreateCommand 그냥 필드 JSR303 검증 제약이 많은 주석되는 POJO이다. 답에 대한
public class UserCreateCommand {
@Length(min = 2)
@NotBlank
private String login;
@Email
@NotNull
private String emailAddress;
....
//GETTER and SETTER
}
감사합니다. 하나의 도메인 클래스와 해당 단위 테스트로 간단한 예제를 제공 할 수 있습니까? 이 클래스의 유효성을 검사하기 위해 Spring을 설정하는 방법을 알고 싶습니다. 도와 주셔서 정말로 고맙습니다. –
예를 들어 주셔서 감사합니다.NotEmptyTestClass에서 응용 프로그램 컨텍스트에서 LocalValidatorFactoryBean을 선언 할 수 있습니다. 맞습니까? 그런 다음이 ValidatorFactory에서 Validator를 가져와야합니다. UserCreateCommand 인스턴스에서 validate 메소드를 호출하면 JSR-303 주석에 따라 유효성 검증 메소드가 유효한지 확인합니다. (저는 MVC를 사용하지 않기 때문에 일반적인 경우에 어떻게 동작하는지 모르겠습니다). –
나는 마지막 코멘트를 100 % 이해하지 못한다. 그러나 테스트는 스프링없이 작동합니다 (이 의미는 스프링 컨텍스트 없음)! 반면에 Validator를 Spring Bean에 주입 할 수 있어야합니다. 중요한 점은 "봄 콩"은 모든 수업이 봄 콩이 아니라는 것입니다. 필자의 예에서는 Controller가 유일한 Spring Bean입니다. (당신은 "@Configurable"을 봐야한다.) – Ralph