Everyday Dev System

Validation, 회원가입 데이터에 적용하기 본문

내배캠 주요 학습/Spring 숙련

Validation, 회원가입 데이터에 적용하기

chaeyoung- 2023. 6. 20. 13:38

이전 Validation 관련 글

2023.06.20 - [내배캠 주요 학습/Spring 심화] - 중요한 Validation, 예외처리

 

 

1. 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

 

2. Dto에 필드마다 Validation 어노테이션 기재

package com.sparta.springauth.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class SignupRequestDto {
    @NotBlank
    private String username;
    
    @NotBlank
    private String password;
    
    @Email
    @NotBlank
    private String email;
    private boolean admin = false;
    private String adminToken = "";
}

 

3. Controller에서 해당 메서드 수정.

** log를 쓰기 위해 클래스 위에 @Slf4j 기재해야 함.

    @PostMapping("/user/signup")
    public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
        // Validation 예외처리
        List<FieldError> fieldErrors = bindingResult.getFieldErrors();
        if(fieldErrors.size() > 0) {
            for (FieldError fieldError : bindingResult.getFieldErrors()) {
                log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
            }
            return "redirect:/api/user/signup";
        }

        userService.signup(requestDto);

        return "redirect:/api/user/login-page";
    }

- Validation에서 예외가 발생하면 BindingResult 객체에 오류에 대한 정보가 담겨서 들어온다.

 

List<FieldError> fieldErrors = bindingResult.getFieldErrors();

bindingResult에서 오류가 난 필드들을 가져와서 List 형태로 저장한다.

if()~문을 통해 오류가 난 필드가 있는지를 확인한다.

즉, 오류 필드 여부를 확인하기 위해 선언된 리스트일 뿐이다.

 

log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());

오류가 난 필드와 에러 메시지를 가져와서 로그에 출력한다.

 

오류 발생한 경우 회원가입 페이지를 다시 redirect 하고,

오류가 발생하지 않은 경우 로그인 페이지로 이동한다.

 

 

결과 : 

아무 내용도 입력하지 않고 회원가입을 누를 경우 서버에 오른쪽과 같은 log.error를 띄어준다.