어떤 한 사람의 정보를 입력받는다고 할 때 아래와 같은 데이터들을 저장 받을 수 있다.
하지만 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 어노테이션을 붙여줌으로써 사용자가 Post기능으로 정보를 보내면
보낸 정보의 유효성을 검사한다.
아래와 같이 옳게된 Json을 Post 보내주면 에러가 발생하지 않는다.
{
"name":"길동",
"age":20,
"email":"gil@gmail.com",
"phone_number":"010-1234-5678",
"register_at":"2024-03-24T13:05:10",
"password":"hideit"
}