BindingResult
는 Spring MVC에서 데이터 바인딩 및 유효성 검증(Validation) 결과를 처리하기 위해 사용되는 인터페이스입니다. 보통 @ModelAttribute
또는 @RequestBody
와 함께 사용되며, 검증 오류 정보를 저장하고 이를 확인하거나 처리할 수 있도록 도와줍니다.
바인딩 결과 저장
유효성 검증 결과 저장
에러 확인 및 처리
hasErrors()
hasFieldErrors(String field)
getFieldErrors()
getFieldError(String field)
getAllErrors()
reject(String errorCode)
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
를 사용하지 않으면 검증 실패 시 예외(MethodArgumentNotValidException
)가 발생합니다. BindingResult
를 통해 예외를 방지하고 에러를 수동으로 처리할 수 있습니다.유연한 에러 처리
@ModelAttribute
또는 @Valid
바로 뒤에 위치해야 합니다.
순서가 잘못되면 Spring이 BindingResult
를 인식하지 못해 오류가 발생합니다.
// 올바른 예
public String method(@ModelAttribute @Valid User user, BindingResult bindingResult)
// 잘못된 예
public String method(BindingResult bindingResult, @ModelAttribute @Valid User user)
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
는 데이터 바인딩 및 유효성 검증의 결과를 처리하고 사용자에게 적절한 피드백을 제공하기 위한 핵심 도구입니다. 이를 활용하면 검증 실패에 대한 유연한 로직을 작성할 수 있고, 사용자 경험을 개선할 수 있습니다.
추가 학습 자료