회원 등록 폼에서 입력값 검증 에러 발생 시 insert 하지 않는 코드 작성했다
메서드 매개변수의 도메인 클래스에는 @Validated를 지정하고
그 직후에 BindingResult를 정의한다
여기에는 요청 데이터의 바인딩 오류와 입력값 검증 오류 정보가 저장된다
@PostMapping("/registerForm01Post")
public String registerForm01Post(
@Validated Member member,
BindingResult brResult) {
log.info("registerForm01Post->member : " + member);
//1) true : 문제발생, 2) false : 문제없음
log.info("brResult.hasErrors() : " + brResult.hasErrors());
//검증 오류 발생 시 => insert 안 함
if(brResult.hasErrors()) {
//검사 결과 오류 확인
List<ObjectError> allErrors = brResult.getAllErrors();
//객체와 관련된 오류
List<ObjectError> globalErrors = brResult.getGlobalErrors();
//멤버변수와 관련된 오류
List<FieldError> fieldErrors = brResult.getFieldErrors();
//오류 로그 출력
for (ObjectError objectError : allErrors) {
log.info("allError : " + objectError);
}
for (ObjectError objectError : globalErrors) {
log.info("globalError : " + objectError);
}
for (ObjectError objectError : fieldErrors) {
log.info("fieldError : " + objectError);
}
return "registerForm05";
}
//검증 오류 발생 시 => insert 하기
// ~~대충 insert하는 코드~~
return "registerForm05";
}
제출했을 때 검증 에러가 발생했다면 insert 되지 않고 에러 메시지를 띄우고
에러가 없었다면 if문 통과해서 정상적으로 인서트 되게 한다
- hasErrors() : 에러 발생한 경우 true
- hasGlobalErrors() : 객체레벨 에러 발생한 경우 true
- hasFieldErrors() : 필드레벨 에러 발생한 경우 true
- hasFieldErrors(String) : 인수에 지정한 필드에서 에러가 발생한 경우 true