스프링부트에서 @Valid로 유효성 검사 시
Integer 등 숫자형에 문자열이 입력된 경우 typeMismatch 에러가 발생하며 아래와 같은 메세지가 결과물로 온다.
Failed to convert property value of type java.lang.String to required type java.lang.Integer for property age; nested exception is java.lang.NumberFormatException: For input string: "abcd"
이 문구를 바로 사용자에게 보여줄 수 없으므로 해당 에러인 경우 에러 메세지를 커스텀화 해야 한다.
dto
@Getter
@Setter
@ToString
public class PersonForm {
@NotBlank(message="이름을 입력해 주세요.")
@Size(min=2, max=30, message="글자수가 안맞아요.")
private String name;
@NotNull(message="나이를 입력해 주세요.")
@Min(value=18, message="나이는 최소한 18세이상으로 입력하세요.")
private Integer age;
}
controller
@PostMapping("/form")
public String validation_valid(@Valid PersonForm personForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return TEMPLATE_DIR.concat("form");
}
return "redirect:/" + TEMPLATE_DIR.concat("result");
}
html
<form id="frm" action="#" method="post" th:action="@{/validation/form}" th:object="${personForm}">
name : <input th:field="*{name}"><br>
<div class="error" th:if="${#fields.hasErrors('name')}" th:errors="*{name}"> Name Error</div>
age : <input th:field="*{age}"><br>
<div th:if="${#fields.hasErrors('age')}" th:errors="*{age}"> Age Error</div>
<button type="submit">Submit</button>
</form>
이런 구성인 경우 age에 문자를 입력 시 위와 같은 에러 메세지가 표시된다.
스프링부트인 경우
resources 폴더아래에
messages.properties 파일을 생성하고 아래와 같이 입력해 주면 된다.
typeMismatch.java.lang.Integer=숫자로 입력해 주세요.
'Java > 스프링부트' 카테고리의 다른 글
스프링부트 로컬에서 여러개 띄울때 세션 끊어지는 것 방지 (0) | 2022.01.06 |
---|---|
Spring Boot 에서 Validation 사용자 정의 커스터마이징 하여 사용하기 (0) | 2021.09.10 |
thymeleaf 에서 외부 사이트 특정 부위 insert(include) 하기 (1) | 2021.07.07 |
스프링부트 자동 빌드 - 자바, thymeleaf 자동 리로드, autoreload, livereload (1) | 2021.06.29 |
스프링부트 - 01. 스프링부트 개발환경 설정 (1) | 2019.08.21 |