**자체는 단순한 인터페이스로 Errors 인터페이스를 확장
**하고 있으며
Errors는 특정 객체에 대한 Data Binding이나 Validation의 결과를 담고 에러 반환하는 역할을 정의
BindingResult는 이를 좀 더 Data Binding 위주로 사용할 수 있도록 정의되어 있다.
스프링에서는 사용자가 전달한 파라미터를 String, Integer 등으로 바인딩이 가능하다.
이때 변환 불가능한 자료형이거나 검층 규칙을 위반했을 경우 BindingResult의 구현체에 담겨서 전달
BindingResult 인터페이스를 아래처럼 핸들러 메서드의 파라미터로 등록하여 바인딩 결과 확인 가능
@PostMapping("/register")
public String submitRegister(
@ModelAttribute("command") @Valid RegisterRequestCommand command,
BindingResult bindingResult){
if(bindingResult.hasErrors()) {
response.setStatus(HttpStatus.UNPROCESSABLE_ENTITY.value());
return "account/register";
}
...
어긋나는 데이터를 전송하면 **BeanPropertyBindingResult
**라는 BindingResult 구현체가 파라미터로 전달
위 클래스는 Errors, BindingResult를 구현하며 현재 요청을 처리할 때 발생한 문제를 담고 있다
BindingResult는 BindException, MethodArgumentNotValidException이 공통으로 구현하고 있고
두 예외 모두 같은 코드로 처리할 수 있기 때문에 매개변수로 BindingResult를 넘기는거로 선택했습니다.