본문 바로가기

프디아 백엔드

유효성 검사 : post할 때 값이 없으면??

어노테이션을 사용한 유효성 검사

 

@NotNull - 빈값인지 확인 , @Email - 이메일 형식이 맞는지 확인  @Pattern - 비밀번호 형식

컨트롤러에 @Valid 넣어주기!! (+dependencies 설정)

implementation 'org.springframework.boot:spring-boot-starter-validation'
package com.example.PDA_SHOPPINGMALL.Users;

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

@Getter
@Setter
public class UserDTO {

    @NotBlank(message ="아이디가 입력되지 않았습니다.")
    String userId;
    @NotBlank(message = "비밀번호가 입력되지 않았습니다.")
    @Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,16}")
    String password;
    @NotBlank(message = "이름이 입력되지 않았습니다.")
    String name;
    @Email(message = "이메일 형식이 다릅니다")
    String email;
    @NotBlank(message = "연락처가 입력되지 않았습니다.")
    String contact;

}

 

@PostMapping("/user/signup")
    public ApiUtils.ApiResult signUp(@Valid @RequestBody UserDTO userDTO){

       if(checkId(userDTO)){
           return error("아이디 중복", HttpStatus.CONFLICT);
       }

        User requestUser = fromDtoToEntity(userDTO);

        String userId = userService.signUp(requestUser);
        log.info(userId);
        return success(userId);
    }

 

 

 

 

 

이렇게 error가 날라온다!

 

Bad Request가 날라왔을 때 error를 좀 더 구체화해보자

@PostMapping("/user/signup")
    public ApiUtils.ApiResult signUp(@Valid @RequestBody UserDTO userDTO, Errors errors){

        if(errors.hasErrors()){
            String message = errors.getFieldError().getDefaultMessage();
            return error(message, HttpStatus.BAD_REQUEST);
        }

        else{

            /*if(checkId(userDTO)){
                return error("아이디 중복", HttpStatus.CONFLICT);
            }*/

            User requestUser = fromDtoToEntity(userDTO);

            String userId = userService.signUp(requestUser);
            log.info(userId);
            return success(userId);

        }


    }

메시지까지 포함하여 날라오는 걸 볼 수 있다

 

그렇다면 

Validated와 Valid는 어떤 차이가 있을까?

 

  • @Valid는 컨트롤러에서 직접적으로 유효성 검증 처리  @Validated는 빈으로 등록된 클래스에서 유효성 검증 처리
  • @Valid는 검증 결과를 BindingResult에 담음  @Validated는 Errors에 담음
  • @Valid는 검증 그룹을 사용할 수 없지만, @Validated는 검증 그룹 사용 가능