Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Greedy
- 인프런
- 자바
- Proxy
- AOP
- pointcut
- 스프링 핵심 기능
- http
- Spring Boot
- springdatajpa
- 알고리즘
- jpa
- QueryDSL
- 김영한
- JPQL
- kotlin
- 스프링 핵심 원리
- java
- spring
- 백준
- 그리디
- Exception
- Servlet
- Android
- transaction
- 스프링
- JDBC
- db
- SpringBoot
- Thymeleaf
Archives
- Today
- Total
개발자되기 프로젝트
FieldError, ObjectError 본문
1. 목표
- 사용자 입력 오류 메시지가 화면에 남도록 하자.
- 예) 가격을 1000원 미만으로 설정시 입력한 값이 남아있어야 한다.
2. FieldError는 두 가지 생성자 제공.
public FieldError(String objectName, String field, String defaultMessage);
public FieldError(String objectName, String field, @Nullable Object rejectedValue,
boolean bindingFailure, @Nullable String[] codes,
@Nullable Object[] arguments, @Nullable String defaultMessage)
- objectName : 오류가 발생한 객체 이름
- field : 오류 필드
- rejectedValue : 사용자가 입력한 값(거절된 값)
- bindingFailure : 타입 오류 같은 바인딩 실패인지, 검증 실패인지 구분 값
- codes : 메시지 코드
- arguments : 메시지에서 사용하는 인자
- defaultMessage : 기본 오류 메시지
3. 오류 발생 시 사용자 입력값 유지
- 사용자의 입력 데이터가 컨트롤러의 @ModelAttribute 에 바인딩되는 시점에 오류가 발생하면
- 모델 객체에 사용자 입력 값을 유지하기 어렵다.
- 예를 들어서 가격에 숫자가 아닌 문자가 입력된다면 가격은 Integer 타입이므로
- 문자를 보관할 수 있는 방법이 없다.
- 그래서 오류가 발생한 경우 사용자 입력 값을 보관하는 별도의 방법이 필요하다.
- 그리고 이렇게 보관한 사용자 입력 값을 검증 오류 발생시 화면에 다시 출력하면 된다.
- FieldError 는 오류 발생시 사용자 입력 값을 저장하는 기능을 제공한다.
- 여기서 rejectedValue 가 바로 오류 발생시 사용자 입력 값을 저장하는 필드다.
- bindingFailure 는 타입 오류 같은 바인딩이 실패했는지 여부를 적어주면 된다.
- 여기서는 바인딩이 실패한 것은 아니기 때문에 false 를 사용한다.
4. Thymeleaf의 사용자 입력 값 유지
- th:field="*{price}"
- 타임리프의 th:field 는 매우 똑똑하게 동작하는데, 정상 상황에는 모델 객체의 값을 사용하지만,
- 오류가 발생하면 FieldError 에서 보관한 값을 사용해서 값을 출력한다.
5. 스프링의 바인딩 오류 처리
- 타입 오류로 바인딩에 실패하면 스프링은 FieldError 를 생성하면서 사용자가 입력한 값을 넣어둔다.
- 그리고 해당 오류를 BindingResult 에 담아서 컨트롤러를 호출한다.
- 따라서 타입 오류 같은 바인싱 실패시에도 사용자의 오류 메시지를 정상 출력할 수 있다.
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
오류 코드와 메시지 처리 2 (0) | 2021.09.24 |
---|---|
오류 코드와 메시지 처리1 (0) | 2021.09.24 |
BindingResult2 (0) | 2021.09.24 |
BindingResult1 (0) | 2021.09.24 |
검증 직접 처리, validation (0) | 2021.09.24 |
Comments