- 웹에서 값을 입력 받을때 오류 메시지를 띄워주는 것은 사용자에게 편의를 제공하는 중요한 일이다
- BindingResult
- 스프링이 제공하는 검증 오류를 보관하는 객체
- 검증 오류가 발생하면 여기에 보관하면 된다
- BindingResult가 있으면 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출된다
- 원래는 400오류로 페이지를 띄우주지 않는다
- BindingResult의 객체에 타입 오류 등으로 바인딩에 실패하는 경우 스프링이 지원하는 FiedError를 생성해서 BindingResult에 넣어준다
public String addItemV2(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) { if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item", "itemName", item.getItemName(), false, null, null, "상품 이름은 필수입니다.")); } }
- 위와 같이 FieldError에 값을 넣어줘서 BindingResult 에 넣어준다
- BindingResult를 사용하기 위해서는 앞에 ModelAttribute가 와야 사용 가능
- FieldError 생성자에서 제공하는 파라미터 목록
- objectName : 오류가 발생한 객체 이름
- field : 오류 필드
- rejectedValue : 사용자가 입력한 값 (거절된 값)
- bindingFailure : 타입 오류 같은 바인딩 실패인지,검증 실패인지 구분 값
- codes : 메시지 코드
- arguments : 메시지에서 사용하는 인자
- defaultMessage : 기본 오류 메시지
- 오류 메시지 파일을 인식할 수 있게 다음 설정을 추가
- spring.messages.basename=messages,errors
- resources파일에 errors.properties를 추가
required.item.itemName=상품 이름은 필수입니다. range.item.price=가격은 {0} ~ {1} 까지 허용합니다. max.item.quantity=수량은 최대 {0} 까지 허용합니다. totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
- 프로퍼티를 사용해서 값을 입력해줄 수 있음설정해준 range.item.price를 사용해서 값을 string[]에 값을 넣어줌
- new FieldError("item", "price", item.getPrice(), false, new String[] {"range.item.price"}, new Object[]{1000, 1000000}
본 글은 김영한님의 스프링 MVC 2편을 보고 참고했습니다
'프레임워크 > 스프링' 카테고리의 다른 글
[Spring Boot] MariaDB, maven을 활용한 게시판 만들기 (3) (0) | 2022.03.15 |
---|---|
[Spring Boot] MariaDB, maven을 활용한 게시판 만들기 (2) (0) | 2022.03.15 |
[Spring Boot] MariaDB, maven을 활용한 게시판 만들기 (1) (0) | 2022.03.15 |
[Spring Boot] API VALIDATION (0) | 2022.03.07 |
[스프링]Bean Validation (0) | 2022.02.22 |
댓글