728x90
BindingResult
- 클라이언트로부터 전달받은 사용자의 입력 데이터에 대한 유효성 검사를 용이하게 하기 위해 Spring에서 제공하는 기능이다.
- 검증 오류가 발생하면 그 오류 내용을 보관하는 역할을 하는 객체이다.
- 입력 데이터의 유효성 검사에 실패하면 ConstraintViolationException이 발생되고 이때 에러 정보를 BindingResult에 저장하게 된다.
BindingResult 의 사용 예시
@PostMapping("/register")
public String registerUser(@ModelAttribute("user") @Valid User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// Handle validation errors
return "registration-form";
}
// Process successful form submission
userService.registerUser(user);
return "redirect:/success";
}
BindingResult 객체에 검증 오류 내용을 저장하는 방법 3 가지
1. @ModelAttribute 사용
- @ModelAttribute는 HTTP 파라미터를 객체로 매핑해 준다.
- @ModelAttribute의 파라미터로 받은 데이터가 검증 오류로 바인딩에 실패하면 스프링이 자동으로 FieldError를 만들고 BindingResult에 저장한다.
2. @Valid, @Validated 사용
- 객체에 대한 유효성 검사를 수행하고 BindingResult에 유효성 검사 오류를 수집하도록 지시한다.
3. new FieldError 사용
- new FieldError로 객체를 생성하여 개발자가 수동으로 저장한다.
BindingReult 인터페이스가 제공하는 메서드
hasErrors()
- 유효성 검사 오류가 있는지 여부를 나타내는 boolean 값을 반환한다.
getAllErrors()
- 바인딩 프로세스 중에 발생한 모든 유효성 검사 오류를 나타내는 ObjectError 및 FieldError 인스턴스 목록을 반환한다.
getFieldErrors()
- 특정 양식 필드와 관련된 유효성 검사 오류를 나타내는 FieldError 인스턴스 목록을 반환한다.
getGlobalErrors()
- 특정 양식 필드와 연결되지 않은 전역 유효성 검사 오류를 나타내는 ObjectError 인스턴스 목록을 반환한다.
addError()
- BindingResult에 수동으로 오류를 추가한다.
BindingResult가 중요한 이유
유효성 검사 수행
- 클라이언트가 보낸 데이터에 유효성 검사 규칙을 적용함으로써 바인딩 프로세스 중에 발생하는 오류를 잡아낼 수 있다.
오류 처리 사용자 정의
- BindingResult에서 제공하는 정보를 사용하여 사용자 컨텍스트에 대한 오류 메시지 및 응답을 조정할 수 있다.
- 예를 들어 메시지의 출력 길이 조정, 원하는 문장만 출력하게 할 수 있다.
사용자 경험 개선
- BindingResult를 효과적으로 활용하면 클라이언트로부터 유효하지 않은 데이터가 포함된 양식을 받을 때 그 응답값으로 잘못된 부분을 바로 알릴 수 있다.
- 이를 통해 빠르게 수정하여 애플리케이션의 전반적인 사용자 경험을 향상시킬 수 있다.
참고
ChatGPT
https://tecoble.techcourse.co.kr/post/2021-05-11-requestbody-modelattribute/
728x90
'[JAVA] > JAVA 기본' 카테고리의 다른 글
Comparable과 Comparator.comparing() 간단 정리 (0) | 2023.06.14 |
---|---|
NPE와 Optional에 대해 간단히 알아보기 (0) | 2023.06.13 |
내부 클래스를 static으로 선언해야 하는 이유 (2) | 2023.06.09 |
try - catch 문을 여러 경우의 수로 한 번에 이해해보자. (0) | 2023.05.24 |
JAVA + Spring Data JPA 프로젝트에 다중 DB를 연결해보자. (0) | 2023.05.23 |