BindingResult와 Errors는 Spring Framework에서 사용되는 검증 결과를 담은 객체들로, 주로 웹 애플리케이션에서 폼 데이터 유효성을 검사하고 처리할 때 사용된다. 이 두 객체는 비슷한 역할을 하지만 약간의 차이가 있다.
1. BindingResult
주로 스프링 MVC 컨트롤러 메서드에서 데이터 바인딩 및 검증 결과를 수집하는 데 사용된다. 주로 폼 데이터를 엔티티 객체나 DTO 객체로 바인딩하고 검증할 때 활용된다.
특징
- 스프링 MVC 컨트롤러 메서드의 파라미터로 전달받는다.
- 주로 데이터 바인딩 및 유효성 검사 과정에서 발생하는 오류를 수집한다.
- 해당 컨트롤러 메서드에서 파라미터로 받은 BindingResult 객체를 통해 오류 정보를 확인하고 처리할 수 있다.
- BindingResult 객체에는 각 필드의 검증 결과와 에러 메시지가 포함된다.
예시
@RequestMapping("/register")
public String registerUser(@Valid User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// 에러 처리 로직
return "registrationForm";
}
// 유효성 검사 통과 시 처리
userService.registerUser(user);
return "registrationSuccess";
}
2. Errors
Errors는 스프링 프레임워크의 검증 과정에서 발생한 오류 정보를 담는 인터페이스이다. BindingResult 인터페이스의 상위 인터페이스이다. 주로 Spring의 데이터 유효성 검사(Validation) 프레임워크와 함께 사용되며, @Valid 어노테이션으로 유효성 검사를 활성화할 때 유용하게 사용됩니다.
특징
- 검증 오류 수집: Spring의 @Valid 어노테이션을 사용하면 컨트롤러 메서드의 매개변수로 넘겨진 객체에 대한 유효성 검사가 자동으로 수행된다. 만약 유효성 검사에서 오류가 발생하면 이 오류 정보는 Errors 객체에 자동으로 수집된다.
- 검증 오류 처리: 컨트롤러 메서드 내에서 Errors 객체를 사용하여 검증 오류를 처리할 수 있다. 검증 오류를 확인하고 필요에 따라 오류 메시지를 모델(Model)에 추가하거나 다른 처리를 수행할 수 있다
- @Valid 어노테이션과 함께 사용: @Valid 어노테이션을 사용하여 객체에 대한 검증을 활성화하고, Errors 객체를 사용하여 검증 결과를 처리한다.
예시
@RequestMapping("/register")
public String registerUser(@Valid User user, Errors errors) {
if (errors.hasErrors()) {
// 에러 처리 로직
return "registrationForm";
}
// 유효성 검사 통과 시 처리
userService.registerUser(user);
return "registrationSuccess";
}
컨트로럴에서 예외처리를 할 때 파라미터로 둘 다 사용할 수 있다. BindingResult는 인터페이스이고 Errors 인터페이스를 상속받고 있을 뿐이다. 실제로 컨트롤러에서 넘어오는 구현체는 BeanPropertyBindingResult인데 BindingResult 대신 Errors를 사용해도 된다. Errors 인터페이스는 단순한 오류 저장과 조회 기능을 제공하지만 BindingResult는 여기에 더해서 추가적인 기능 (예를 들어 addError())을 제공한다.
댓글