seong
블로그 만들기 기능 - 백엔드에서 유효성 검사 Validation 라이브러리 사용 본문
백엔드 Validation 처리하기
백엔드에서 처리할 때는 각자의 Dto마다 Validation을 모두 만들어줘야한다.
Dto를 회원가입 하나만 생성한다고 가정해보자
회원가입은 username,password,email 세개가 필요하다.
회원정보 수정은 password, email이 필요하다.
회원 정보 수정할 때 회원가입 Dto를 사용하게 되면 username이 없으니 당연히 에러가 날 것이다.
라이브러리 사용해 확인
주소
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation/2.7.3
자신의 spring 버전에 맞게 다운로드 해준다
1. JoinDto - 회원가입 Dto에 Validation 적용
package site.metacoding.red.web.dto.request.users;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import site.metacoding.red.domain.users.Users;
// size -> 길이 체크
//NotBlank -> null과 공백 검사
@Getter
@Setter
public class JoinDto {
@Size(min = 2, max = 20,message = "길이가 부적합")
@NotBlank(message = "username이 null이거나 공백일 수 없습니다.")
private String username;
@Size(min = 2, max = 20,message = "길이가 부적합")
@NotBlank(message = "username이 null이거나 공백일 수 없습니다.")
private String password;
@Size(min = 4, max = 20,message = "길이가 부적합")
@NotBlank(message = "username이 null이거나 공백일 수 없습니다.")
private String email;
public Users toEntity() {
Users users = new Users(this.username, this.password, this.email);
return users;
}
}
2. Controller 부분
@Valid가 붙으면 해당 객체의 어노테이션(@Size..등등)을 보고 잘 들어왔는지 Validation검사한다.
BindingResult는 에러가 발생할 경우 에러의 정보를 담아주는 역할을 한다.
사용시 주의사항!
Valid 바로 옆에 BindingResult가 붙어있어야 한다.
만약 @Valid JoinDto joinDto, Model model, BindingResult bindResult 처럼 작성되면 제대로 작동하지 않는다
꼭 두개를 붙여서 작성
여기까지 POSTMAN으로 결과 확인 해보기
1. Controller 부분 - 에러 하나만 출력 코드
@PostMapping("/api/join")
public @ResponseBody CMRespDto<?> join(@RequestBody @Valid JoinDto joinDto,BindingResult bindingResult) {// @RequestBody : Dto를 JSON으로 받기 위함
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);// 회원가입이 되면 로그인 폼으로 이동
}
2. 모든 에러 담아 주기 코드
bindresult안에 에러가 저장되어 있다.
에러가 한개가 아닐 수 있기 때문에 For문으로 확인 해준다.
@PostMapping("/api/join")
public @ResponseBody CMRespDto<?> join(@RequestBody @Valid JoinDto joinDto,BindingResult bindingResult) {// @RequestBody : Dto를 JSON으로 받기 위함
if(bindingResult.hasErrors()) {
System.out.println("에러가 있습니다.");
List<FieldError> feList = bindingResult.getFieldErrors();
Map<String,String> map = new HashMap<>();
for(FieldError fe : feList) {
System.out.println(fe.getDefaultMessage());
map.put(fe.getField(), fe.getDefaultMessage());
}
throw new MyApiException(map.toString());
}
else {
System.out.println("에러가 없습니다.");
}
usersService.회원가입(joinDto);
return new CMRespDto<>(1,"회원가입 성공",null);// 회원가입이 되면 로그인 폼으로 이동
}
결과
username의 길이가 2~20이었다
길이를 1로 주고 실행 해보면 에러가 잘 실행 되었다.
'Spring > 블로그 만들기' 카테고리의 다른 글
블로그 만들기 기능 예외 처리 하기 - 커스텀 예외처리 (2) | 2022.09.21 |
---|---|
블로그 만들기 기능 - 프론트에서 유효성 검사 Validation체크(한글,공백,이메일형식) (0) | 2022.09.21 |
(13)블로그 만들기 웹에서 Interceptor 구현 (WebMvcConfigurer 사용) (2) | 2022.09.20 |
(11)블로그만들기 Session 저장 공간 활용 - 검색 후 keyword,currentPage값 가져가기. (0) | 2022.09.19 |
(10)블로그만들기 Ajax - boards 삭제,수정 만들기 (0) | 2022.09.17 |