Spring Boot/STUDY

[Spring Boot] BuildResult란?

코맹 2024. 6. 19. 21:32

 

Spring Boot JPA 프로젝트를 진행하면서 게시판 등록 시 유효성 검사를 하기 위해 @Valid를 사용했다.

이 과정에서 BindingResult를 매개변수로 받아서 에러가 있는지 없는지 확인했는데 무엇인지 정리해보겠다!

 

먼저 사용한 코드부터 보자면,

@PostMapping("/create")
  public String create(@Valid BoardForm boardForm,
                       BindingResult bindingResult) {
    if(bindingResult.hasErrors()) {
      return "board/create";    // 현재 html에 그대로 머무르기
    }
    
    this.boardService.setBoard(boardForm.getTitle(), boardForm.getContent());
    return "redirect:/board/list";
  }

 

  • bindingResult.hasErrors()를 통해 bindingResult에 오류가 담겼는지 여부에 따라 로직을 나눴다.

 


그래서
BindingResult가 뭔데❓

BindingResult란?
  • BindingResult는 스프링이 제공하는 검증 오류 처리 방법의 핵심으로, 스프링이 제공하는 검증 오류를 보관하는 객체
  • 검증 오류가 발생하면 BindingResult 객체에 보관하면 된다.

 

BindingResult 를 사용하면

@ModelAttribute에 데이터 바인딩 오류가 발생했을 때 BindingResult에 오류가 담기게 되고 Controller가 정상 호출된다.

 

BindingResult가 없으면

400 에러가 발생하고, Controller는 호출되지 않으며 동시에 Error Page로 이동하게 된다.

 

BindingResult 메소드 사용 방식

boolean hasErrors() : 에러의 유무를 판단한다.

boolean hasGlobalErrors() : 글로벌 에러의 유무를 판단한다.

void addError(ObjectError error) : field, type, value 등의 에러를 출력할 수 있다.

void rejectValue() : field, errorCode, defaultMessage 등을 받아서 reject 됐을 때 데이터를 남길 수 있다.