다음과 같이 도메인 위에 어노테이션을 이용해서 조건을 걸 수가 있다. (@Past는 과거 날짜만 들어오게끔한 어노테이션)
import javax.validation.constraints. ~~ 를 import 하는데 만약 오류가 뜬다면
implementation 'org.springframework.boot:spring-boot-starter-validation'
위의 의존성을 추가하자(gradle 프로젝트 기준이고, maven 은 알아서 dependency 설정으로 추가해주면 될 것이다.)
Valid로 검사해주려는 값 앞에 @Valid를 붙인다. 일단 exception 처리를 해주려고 하기 때문에
파라미터 값으로 BindingResult를 넣으면 오류가 난다.
@ControllerAdvice를 이용해서 모든 컨트롤러의 익셉션을 처리해주기 위한 클래스이다.
ResponseEntityExceptionHandler 의 handleMethodArgumentValid 메서드를 오버라이딩 해주었다.
ExceptionResponse의 형태로 받아주었다. "validation failed" 칸 안에 ex.getMessage()를 넣어도 되는데 ex.getBindingResult() 값과 유사해서 "validation failed" 로 간략하였다.
그 결과 다음과 같이 나왔다.
default message 부분을 수정할 수도 있다.
다음과 같이 message 값을 설정하면 된다.
이 error 값들을 html 에 출력을 해보자.
위의 코드는 회원가입 화면에서 입력을 한 후에 회원가입 버튼을 눌렀을 때에 post로 받아온 상황이다.
Valid 에 걸려서 BindingResult result 변수안에 에러가 들어가게되면
"user/user_register" 로 다시 회원가입 페이지를 return 해주었는데,
thymeleaf 기반의 register.html 이다.
해당 field 들이 hasErrors 한다면 그에 맞는 errors 를 출력하는 코드이다.
이로써, Valid 를 통해 exception 처리와 thymeleaf를 이용한 html 처리를 할 수 있다.
'Spring' 카테고리의 다른 글
[Spring] ResponseEntity에 대해서 (0) | 2020.09.18 |
---|---|
[Spring] @JsonFilter 를 이용한 필드값 필터링하기 (0) | 2020.09.16 |
[Spring] @ControllerAdvice를 이용한 Exception custom 처리하기 (0) | 2020.09.15 |
[Spring] @ResponseStatus 를 이용해 예외 상태 변경하기 (0) | 2020.09.15 |
[Spring] PathVariable 사용법 (0) | 2020.09.15 |