StudentValidator.java - 유효성 검사를 할 클래스입니다. - 기본적으로 제공되는 Validator의 함수를 implements했습니다.
- boolean supports(Class clazz) : 어떤 타입의 객체를 검증할 때 이 객체의 클래스가 이 Validator가 검증할 수 있는 클래스인 지를 판단하는 매서드 - void validate(Object target, Errors error) : 실제 검증 로직이 이루어지는 메서드, 구현할 때 ValidationUtils를 사용하여 편리하게 작성 가능
출처: https://engkimbs.tistory.com/728
package com.study.member;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
publicclassStudentValidatorimplementsValidator{
@Overridepublicbooleansupports(Class<?> arg0){
return Student.class.isAssignableFrom(arg0);
}
@Overridepublicvoidvalidate(Object obj, Errors errors){
System.out.println("validate()");
Student student = (Student) obj;
// student 객체에 student형으로 Object obj 동적 바인딩
String studentName = student.getName();
// student 빈에 이름게터를 다른 변수에 저장// 게터에 불러온 데이터가 null 이거나 문자열 공백제거를 한 후 비었으멶if(studentName == null || studentName.trim().isEmpty()) {
System.out.println("studentName is null or empty");
// 에러객체에 이름이 문제생겼다라는 의미를 전달
errors.rejectValue("name", "trouble");
}
// ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "trouble");int studentId = student.getId();
if(studentId == 0) {
System.out.println("studentId is 0");
errors.rejectValue("id", "trouble");
}
// ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "trouble");
}
}
컨트롤러 생성 또는 기본 컨트롤러 사용
StudentController.java - 주소가 입력될 시 해당 매핑 주소로 옮겨주는 부분입니다. - studentCreate 함수에서 Validator로 유효성검사를 실시한 뒤 반환된 주소를를 page에 담아 리턴해 줍니다.
처음엔 리턴값을 jsp로만 지정해줬습니다. 하지만 첫번째 부적합시 다음 부적합 테스트를 하려하니 404에러가 발생해 이를 해결하였습니다. - student/create -> student/student/create (비정상) - student/create -> student/create?name=값&id=값 (정상)
- 검사결과 부적합 시 redirect를 사용해 매핑 주소를 반환시켜줬습니다.
- 또 form action에서 값을 넘겨줄때 일반적인 /student/create가 아닌 ' . ' (점) 을 추가해 실 경로를 지정해주었습니다. - 제 생각으로는 form action에 /student/create 를 넘겨주면 url이 겹쳐지면서 원래 /student/가 인식되면서 시작 작 url로 붙여써지게 된것 같습니다.
댓글