LUMI_dev

Validation #2. Validation 예외처리 본문

스파르타 코딩 클럽 | 자바 심화 과정/Spring Master (숙련 주차)

Validation #2. Validation 예외처리

luminous_dev 2025. 2. 7. 05:20

회원가입 예외처리

 

SignupRequestDto 

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 = "";
}

어노테이션 붙이기

 

 

UserController - signup

package com.sparta.springauth.controller;

import com.sparta.springauth.dto.LoginRequestDto;
import com.sparta.springauth.dto.SignupRequestDto;
import com.sparta.springauth.service.UserService;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Slf4j
@Controller
@RequestMapping("/api")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/user/login-page")
    public String loginPage() {
        return "login";
    }

    @GetMapping("/user/signup")
    public String signupPage() {
        return "signup";
    }

    @PostMapping("/user/signup")
    public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
        //BindingResult : Validation에서 오류가 나면 이 BindingResult 객체에 오류에 대한 정보가 담겨서 들어옴

        
        // Validation 예외처리
        List<FieldError> fieldErrors = bindingResult.getFieldErrors(); //.getFieldErrors() : 오류가 난 field들을 하나씩 가지고 올 수 있음
        if(fieldErrors.size() > 0) { //에러가 있는지 확인
            for (FieldError fieldError : bindingResult.getFieldErrors()) {

                //해당 오류가 어떻게 발생하고 있는지 체크해서 로그를 찍어줌
                log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
                    //fieldError.getField() 어떤 필드에서 에러?
            }
            return "redirect:/api/user/signup"; //다시 회원가입하라
        }

        userService.signup(requestDto);

        return "redirect:/api/user/login-page"; //회원가입 성공
    }
}