Legday
[Spring] Validation 라이브러리 사용하기 본문
Validation 은 웹개발 시 가장 중요한 유효성 검사이다. Validation 을 잘못 설정하면 나중에 서버가 공격을 당할 때 보안에 문제가 생기면서 골치 아파진다
1. 라이브러리 다운받기
- 아래 사이트로 들어간다
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation
- 그리고 Spring에 버전에 맞는 것을 클릭 후 CDN 주소를 가져온다.

- spring에 build.gradle 로 들어가서 dependencies부분에 복사후 Refresh Gradle Project 클릭하여 프로젝트에 적용시켜준다.
2. 코드작성
- 우선 회원가입시에 공백과 null값을 유효성 검사를 하기 때문에 joinDto에 어노테이션을 걸어줘야한다.
- @Size 어노테이션은 문자열길이의 최대(max),최소(min)를 지정할 수 있고 오류 발생시 message에 담긴 문자열을 전송할 수 있다.
- @NotBlank는 null값과 빈공백 값을 다 체크하는 어노테이션으로 @Size 어노테이션과 똑같이 message를 사용할 수 있다.
@Getter
@Setter
public class JoinDto {
@Size(min=2, max = 20, message = "username 길이가 부적합 합니다.")
@NotBlank(message = "username이 null이거나 공백일 수 없습니다.") //null과 empty(공백) 검사
private String username;
@Size(min=2, max = 20, message = "길이가 부적합합니다.")
@NotBlank(message = "password가 null이거나 공백일 수 없습니다.")
private String password;
@Size(min=4, max = 50, message = "길이가 부적합합니다.")
@NotBlank(message = "email이 null이거나 공백일 수 없습니다.")
private String email;
public Users toEntity() {
Users users = new Users();
users.setUsername(this.username);
users.setPassword(this.password);
users.setEmail(this.email);
return users;
}
}
- 그다음 Controller로 간다.(참고로 Validation은 Controller단까지만 하고 절대 serveice단 까지 가지않는다. service단은 dao만 다루기 때문이다.)
- 우선 아까 Vaildation 어노테이션을 걸었떤 클래스 앞에 @Valid 어노테이션을 걸고,
- 그다음 가장 중요한 리턴값을 받아올 BindingResult 객체를 선언해야한다. 이때 반드시 Vaildation을 적용한 클래스 옆에 작성해야 한다. 아니면 인식을 못한다.
- 그리고 hasErrors() 메서드를 통해 Vaildation결과값에 에러가 있는지 없는지 if문을 이용하여 있으면 있다고 출력하고 만약 있다면 FieldError 객체에 error값을 담은 후 Custom Exception으로 던져주면 이쁘게 잘나온다.
@PostMapping("/api/join")
public @ResponseBody CMRespDto<?> join(@RequestBody @Valid JoinDto joinDto, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
System.out.println("에러가 있습니다!");
FieldError fe = bindingResult.getFieldError();
throw new MyApiException(fe.getDefaultMessage());
} else {
System.out.println("에러가 없습니다!");
}
usersService.회원가입(joinDto);
return new CMRespDto<>(1, "회원가입성공", null);
}
'Spring&Springboot > Spring(개인공부용)' 카테고리의 다른 글
| [Springboot] 이미지를 로컬에 저장하고 DB에 저장 (1) | 2022.10.06 |
|---|---|
| [MyBatis]Springboot에서 DB 언더스코어 -> Java 커멜표기법 변환 (0) | 2022.09.27 |
| [Spring] Custom Exception 만들기 (0) | 2022.09.21 |
| [Spring] 인터셉트란? (0) | 2022.09.20 |
| [Spring]아이디 저장기능(Cookie값 이용) (0) | 2022.09.16 |