BindingResult

Kkd·2024년 12월 24일
0

매일메일 개념정리

목록 보기
53/93

BindingResult는 Spring MVC에서 데이터 바인딩 및 유효성 검증(Validation) 결과를 처리하기 위해 사용되는 인터페이스입니다. 보통 @ModelAttribute 또는 @RequestBody와 함께 사용되며, 검증 오류 정보를 저장하고 이를 확인하거나 처리할 수 있도록 도와줍니다.


주요 역할

  1. 바인딩 결과 저장

    • HTTP 요청 데이터를 객체에 바인딩하는 과정에서 발생한 에러를 저장합니다.
  2. 유효성 검증 결과 저장

    • 데이터 유효성 검증(@Valid, @Validated)을 수행한 후 발생한 검증 오류를 저장합니다.
  3. 에러 확인 및 처리

    • 에러가 있는지 확인하거나, 에러 메시지를 가져와 사용자에게 표시하는 데 사용됩니다.

주요 메서드

  1. hasErrors()
    • 바인딩 또는 검증 과정에서 에러가 발생했는지 여부를 반환합니다.
  2. hasFieldErrors(String field)
    • 특정 필드에 에러가 있는지 확인합니다.
  3. getFieldErrors()
    • 모든 필드 에러 정보를 반환합니다.
  4. getFieldError(String field)
    • 특정 필드와 관련된 첫 번째 에러를 반환합니다.
  5. getAllErrors()
    • 객체 수준 및 필드 수준의 모든 에러를 반환합니다.
  6. reject(String errorCode)
    • 전역 에러를 추가합니다.
  7. rejectValue(String field, String errorCode)
    • 특정 필드에 에러를 추가합니다.

사용 예제

폼 데이터 바인딩 및 검증

public class User {
    @NotBlank(message = "이름은 필수 항목입니다.")
    private String name;

    @Min(value = 18, message = "나이는 18 이상이어야 합니다.")
    private int age;

    // Getter & Setter
}
@Controller
public class UserController {

    @PostMapping("/register")
    public String registerUser(
        @ModelAttribute @Valid User user,
        BindingResult bindingResult
    ) {
        if (bindingResult.hasErrors()) {
            // 에러가 있으면 다시 입력 페이지로 이동
            return "registerForm";
        }

        // 성공 처리
        return "successPage";
    }
}

BindingResult가 필요한 이유

  1. 검증 실패 시 예외 방지

    • BindingResult를 사용하지 않으면 검증 실패 시 예외(MethodArgumentNotValidException)가 발생합니다.
    • BindingResult를 통해 예외를 방지하고 에러를 수동으로 처리할 수 있습니다.
  2. 유연한 에러 처리

    • 에러를 확인하고, 사용자에게 적합한 메시지를 제공하거나 추가 로직을 수행할 수 있습니다.

BindingResult의 위치

@ModelAttribute 또는 @Valid 바로 뒤에 위치해야 합니다.
순서가 잘못되면 Spring이 BindingResult를 인식하지 못해 오류가 발생합니다.

// 올바른 예
public String method(@ModelAttribute @Valid User user, BindingResult bindingResult)

// 잘못된 예
public String method(BindingResult bindingResult, @ModelAttribute @Valid User user)

HTML에서 에러 메시지 출력

BindingResult에 저장된 에러 메시지는 뷰에서 출력할 수 있습니다.

<form action="/register" method="post">
    <input type="text" name="name" placeholder="이름">
    <div th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></div>

    <input type="number" name="age" placeholder="나이">
    <div th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></div>

    <button type="submit">등록</button>
</form>

결론

BindingResult는 데이터 바인딩 및 유효성 검증의 결과를 처리하고 사용자에게 적절한 피드백을 제공하기 위한 핵심 도구입니다. 이를 활용하면 검증 실패에 대한 유연한 로직을 작성할 수 있고, 사용자 경험을 개선할 수 있습니다.

추가 학습 자료

profile
🌱

0개의 댓글