Lonely Snowman
 

[Spring] 입력값 검증 결과 - 에러 정보 확인

회원 등록 폼에서 입력값 검증 에러 발생 시 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