소스코드 다운받기

  • 폼 데이터 검증은 클라이언트 쪽에서 유효성검사하는 편이 서버에 부담을 주지 않기 때문에 더 바람직한 방법이다. 이 강의는 참고용으로 알아 두자

15-1 Validator를 이용한 검증

  • Validator 인터페이스를 구현한 클래스 생성
  • validate() 메서드 사용
@RequestMapping("/student/create")
public String studentCreate(@ModelAttribute("student") Student student, BindingResult result){

	// 에러가 없으면 createDonePage 리턴
	String page = "createDonePage";

	StudentValidator validator = new StudentValidator();
	validator.validate(student, result);
	if(result.hasErrors()){
		// 에러가 있으면 createPage를 리턴
		page = "createPage";
	}
	return page;
}
// StudentValidator.java

public void validate(Object obj, Errors errors){
	System.out.println("validate()");
	Student student = (Student)obj;

	String studentName = student.getName();
	if(studentName == null || studentName.trim().isEmpty()){
		System.out.println("studentName is null or empty");
		errors.rejectValue("name", "trouble");
	}

	int studentId = student.getId();

	// student 객체에 studentId 값이 들어오지 않으면
	if(studentId == 0){
		System.out.println("studentId is 0");
		errors.rejectValue("id", "trouble");
	}
}

15-2 ValidationUtils 클래스

  • validate()메서드를 편리하게 사용 할 수 있도록 고안된 클래스
String studentName = student.getName();
if(studentName == null || studentName.trim().isEmpty()){
	System.out.println("studentName is null or empty");
	errors.rejectValue("name", "trouble");
}

ValidationUtils.rejectIfEmptyOrWhiteSpace(errors, "name", "trouble");

15-3 @Valid와 @InitBinder

  • 의존 추가
<!-- xml -->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>4.2.0.Final</version>
</dependency>
  • @Valid 추가
@RequestMapping("/student/create")
// @Valid 추가
public String studentCreate(@ModelAttribute("student") @Valid Student student, BindingResult result){

	// 에러가 없으면 createDonePage 리턴
	String page = "createDonePage";

	// 아래 두 줄은 필요 없음

	// StudentValidator validator = new StudentValidator();
	// validator.validate(student, result);

	if(result.hasErrors()){
		// 에러가 있으면 createPage를 리턴
		page = "createPage";
	}
	return page;
}
  • @InitBinder 추가

@InitBinder
protected void initBinder(WebDataBinder binder){
	binder.setValidator(new StudentValidator());
}

참고자료