Validation in Spring(유효성 검사) - 1

Gihongg·2024년 3월 22일

Spring Boot

목록 보기
12/24

어떤 한 사람의 정보를 입력받는다고 할 때 아래와 같은 데이터들을 저장 받을 수 있다.

  • 이름
  • 이메일
  • 비밀번호
  • 나이
  • 휴대폰 번호
  • 회원가입 시점

하지만 String, Integer과 같은 타입으로 지정해버리면

이메일에 아무글자나 들어갈수도, 휴대폰번호에 아무 글자나 들어갈도 있다.

즉 각 항목의 유효성을 검사해서 적합한지 확인해야한다.

package org.example.validation.model;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.namespace.NamespaceContext;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRegisterRequest {

//    @NotNull // !=null
//    @NotEmpty // ! = null && name != ""
    @NotBlank // !=null && name != "" && name != "  "
    private String name;

    @Size(min=1,max = 12)
    @NotBlank
    private String password;

    @NotNull //문자가 아니라서 NotBlank나 NotEmpty를 넣어줄 수 없다.
    private Integer age;
    @Email //이메일 형식 받기
    private String email;


    @Pattern(regexp = "^\\d{2,3}-\\d{3,4}-\\d{4}$",message = "휴대폰 번호 양식에 맞지 않습니다.")    //정규식을 통해 해당 핸드폰번호를 검증함
    private String phoneNumber;

    @FutureOrPresent // 현재 또는 미래만 받는다.
    private LocalDateTime registerAt;

}

위와 같이 모든 변수의 유효성을 검사해야한다.

이제 이 클래스를 컨트롤러에 사용하기 위해서는 아래와 같이 작성하면 된다.

package org.example.validation.controller;


import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.example.validation.model.UserRegisterRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("api/user")
public class UserApiController {


    @PostMapping("")
    public UserRegisterRequest register(

            @Valid //valid 어노테이션을 붙여주면 요청이 들어올 때 해당 클래스에 대해서 붙어있는  어노테이션을 기반으로 검증을 해준다.
            @RequestBody UserRegisterRequest userRegisterRequest){

                  log.info("init : {}", userRegisterRequest);

                  return userRegisterRequest;

    }


}

@valid

@valid 어노테이션을 붙여줌으로써 사용자가 Post기능으로 정보를 보내면
보낸 정보의 유효성을 검사한다.

Post를 보내기

아래와 같이 옳게된 Json을 Post 보내주면 에러가 발생하지 않는다.

{

  "name":"길동",
  "age":20,
  "email":"gil@gmail.com",
  "phone_number":"010-1234-5678",
  "register_at":"2024-03-24T13:05:10",
  "password":"hideit"

}
profile
전천후 개발자

0개의 댓글