반응형
Spring Validation?
쉽게 말해서 Spring에서 특정 데이터의 검증을 도와주는 녀석이라고 볼 수 있다.
validation?
데이터의 검증을 의미
(해당 데이터가 형식은 맞는 지, 빈 값은 아닌 지, 최댓값을 넘겼는 지 등)
Spring Validation 사용 방법
필자의 개발 환경은 아래와 같다
- Spring Boot : 2.6.2
- maven build 방식
1. 의존성 주입
필자는 maven 방식이므로 pom.xml 에 아래의 소스를 추가했다.
# pom.xml
...
<dependencies>
...
<!-- Spring Validation 의존성 추가 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
...
<dependencies>
...
2. 원하는 Class(DTO)에 validation 어노테이션 작성
public class exampleDto{
@Pattern(regexp ="^[0-9a-zA-Z]+$/", message="아이디는 영문자 또는 숫자를 입력해주세요.")
@Size(min=5, max=15, message="아이디는 5자~15자로 입력해주세요.")
@NotBlank(message="아이디를 입력해주세요.")
private String UserId = "";
@Pattern(regexp ="^[0-9a-zA-Z]+$", message="비밀번호는 영문자 또는 숫자를 입력해주세요.")
@Size(min=10, max=20, message="비밀번호는 10자~20자로 입력해주세요.")
@NotBlank(message="비밀번호를 입력해주세요.")
private String UserPw = "";
public String getUserId() {
return UserId;
}
public void setUserId(String userId) {
UserId = userId;
}
public String getUserPw() {
return UserPw;
}
public void setUserPw(String userPw) {
UserPw = userPw;
}
}
참고로 javax.validation ~ 로 시작하는 녀석을 import 하면 된다.
Validation Annotation List
모든 어노테이션을 적지 않았으니, 필요한 어노테이션은 아래의 블로그를 참고해주시면 좋을 것 같습니다.
- Validation Annotation List 참고 링크 : https://hyeran-story.tistory.com/81
// message는 오류 메시지를 정의하는 곳
// null만 허용
@Null(message="")
// null 허용 X, "", " "는 허용
@NotNull(message="")
// null, "" 허용 X, " "는 허용
@NotEmpty(message="")
// null, "", " " 허용 X
@NotBlank (message="")
// 데이터의 사이즈(최소 길이, 최대 길이) 설정
@Size(min=, max= ,message="")
// 정규식을 이용해서 검사
@Pattern(regexp = ,message="")
// value 이하의 값만 허용
@Max(value = ,message="")
// value 이상의 값만 허용
@Min(value = ,message="")
// 값을 양수만 허용
@Positive(message="")
// 값을 양수와 0만 허용
@PositiveOrZero(message="")
// 값을 음수만 허용
@Negative(message="")
// 값을 음수와 0만 허용
@NegativeOrZero(message="")
// 현재보다 미래의 날짜만 허용
@Future(message="")
// 현재보다 과거의 날짜만 허용
@Past(message="")
// True일 때만 허용(null 체크 X)
@AssertTrue(message="")
// False일 때만 허용(null 체크 X)
@AssertFalse(message="")
3. Controller에서 데이터 정합성 체크
@RequestMapping(value = "/test")
@ResponseBody
public HashMap<String, Object> test (@RequestBody @Validated exampleDto user, Errors errors) {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
// **** 받은 DATA 정합성 체크 (시작) ****//
// 데이터 정합성에 오류가 있는 경우
if(errors.hasErrors()) {
List<ObjectError> errorList = errors.getAllErrors();
// 에러메시지 모두 담기
ArrayList<String> errorMessage = new ArrayList<String>();
for(int i=0; i<errorList.size(); i++) {
ObjectError error = errorList.get(i);
errorMessage.add(error.getDefaultMessage());
}
resultMap.put("errorMessage", errorMessage);
return resultMap;
}
// **** 받은 DATA 정합성 체크 (끝) ****//
...
}
위의 소스코드에서는 errors 변수를 이용해 resultMap의 errorMessage에 정합성 오류 메시지들을 넣었습니다.
감사합니다.
반응형
'BE > Java' 카테고리의 다른 글
[Jasper] 체크박스 사용 방법 (0) | 2022.02.14 |
---|---|
[Jasper] 마지막 장에 빈 페이지가 나오는 이유 (0) | 2022.02.13 |
[Jasper] Table 안보이는 현상 해결 방법 (0) | 2022.01.24 |
[Java] request Attribute vs Parameter (setParameter 사용법) (0) | 2022.01.15 |
[Jasper] 5. JasperStudio 기능 설명 - 2 (0) | 2021.11.14 |