local validator는 저번에 연습을 했다.
근데 회원가입, 로그인, 개인정보 수정, 회원탈퇴 등등에서 공통으로 백에서 id, pwd 널체크를 하는데
이걸 매번 클래스마다 로컬로 추가하지 말고 전역에 추가하는 것으로 바꿨다.
팀원과 스정 강의의 도움으로 했다.
package com.fastcampus.ch4.domain;
import lombok.*;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotEmpty;
@NoArgsConstructor
@Data
@Component //validator를 적용할 대상에 필수이다.
public class User {
private String id;
private String email;
private String pwd;
}
검증 대상인 User 클래스다.
생겼던 에러들
1. 전역 validator의 경우 등록을 해야 하는데 안 해서
메세지를 아예 띄울 수 없었다.
에러: No message found under code '~~' for locale 'ko_KR'.
위 에러는 원인이 여러 가지이다.
아래처럼 설정하자 (패키지 이름과 파일 경로는 케바케다)
<!-- global validator-->
<annotation-driven validator="userValidator"/>
<beans:bean id="userValidator" class="com.fastcampus.ch4.validator.UserValidator"/>
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>error_message</beans:value> <!-- /src/main/resources/error_message.properties -->
</beans:list>
</beans:property>
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
clas UserValidator
package com.fastcampus.ch4.validator;
import com.fastcampus.ch4.domain.User;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
// validator를 적용할 대상 클래스를 써야 한다.
}
@Override
public void validate(Object obj, Errors error) {
ValidationUtils.rejectIfEmptyOrWhitespace(error, "id", "user.id.empty");
ValidationUtils.rejectIfEmptyOrWhitespace(error, "pwd", "user.pwd.empty");
}
}
resources 폴더 안에 error_message.properties를 추가한다. 내용을 아래처럼 작성한다.
user.id.empty=아이디없다
user.pwd.empty=비번없다
팀원분이 해주신 이야기인데 한글 에러메세지가 제대로 나오려면?
인텔리제이 프로젝트 setting도 하나 해야 되었다고 하셔서 그것도 여기 적는다.
setting에 들어가서 encoding을 검색,
Transparent native-to-ascii conversion 항목을 체크하고 확인을 누른다.
에러메세지의 경우 error_message.properties로 해서 할 수도 있지만, 아래처럼 defaultMessage를 설정할 수도 있다.
//validator의 일부
ValidationUtils.rejectIfEmptyOrWhitespace(error, "id", "member.id.empty","아이디를 입력해주세요.");
jsp에서 사용하는 validator용 form태그 라이브러리
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
에러 메세지는 항목당 태그 하나씩 추가하도록 하자.
<form:errors path="id" />
<form:errors path="pwd" />
참고자료
에러메세지 - https://vivalasiesta.tistory.com/155