스프링 15강 - 폼 데이터 값 검증
November 16, 2018
- 폼 데이터 검증은 클라이언트 쪽에서 유효성검사하는 편이 서버에 부담을 주지 않기 때문에 더 바람직한 방법이다. 이 강의는 참고용으로 알아 두자
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());
}
참고자료
- 스프링과정15강 블스(김명호 강사)