[Spring] Validation

개발log·2024년 3월 17일

Spring

목록 보기
6/16
post-thumbnail

Validation

데이터의 유효성을 검증 후 유효하지 않은 경우 사용자에게 적절한 오류 메시지를 반환하는 프로세스

  • @NotNull null x
  • @NotEmpty null, empty("") x
  • @NotBlank null, empty(""), empty(" ")x
  • @Size 문자 길이 측정(int 타입 불가)
  • @Pattern 정규식 적용
  • @Max 최대값
  • @Min 최소값
  • @FutureOrPresent 현재 날짜와 같거나 미래의 날짜인지를 검증
  • @Valid 해당 클래스 Validation 실행

관련 문서 보는 곳

https://beanvalidation.org/2.0/

사용 이유

  • 유효성 검증하는 코드의 길이를 줄일 수 있다.
  • 정확한 데이터로 입력으로 데이터 일관성을 유지할 수 있다.
  • 잘못된 입력으로 인한 오류를 줄인다.

LocalDateTime 값 넣기

UserApiController

@Slf4j
@RestController
@RequestMapping("/api/user")
public class UserApiController {
    @PostMapping("")
    //@RequestBody: HTTP 요청의 본문(body)에 있는 데이터를 Java 객체로 변환
    public UserRegisterRequest register(@RequestBody UserRegisterRequest userRegisterRequest){
        log.info("init : {}",userRegisterRequest);
        return userRegisterRequest;
    }
}

UserRegisterRequest

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonNaming(value= PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRegisterRequest {
    private String name;
    private Integer age;
    private String email;
    private String phoneNumber;
    private LocalDateTime registerAt;
}

결과

  • registerAt만 null값이 뜨는 것을 확인할 수 있음.

해결 방법

  • 날짜와 시간 사이에 T를 넣으면 올바르게 값이 들어가는 것을 확인할 수 있음.
(name=, age=30, email=, phoneNumber=, registerAt=2024-03-17T19:14:05)

Validation 예제 코드

UserApiController

@Slf4j
@RestController
@RequestMapping("/api/user")
public class UserApiController {
    @PostMapping("")
    //@RequestBody: HTTP 요청의 본문(body)에 있는 데이터를 Java 객체로 변환
    //@Valid: 검증, 요청이 들어올 때 해당 클래스에 붙어있는 어노테이션을 기반으로 검증
    public UserRegisterRequest register(@Valid @RequestBody UserRegisterRequest userRegisterRequest){
        log.info("init : {}",userRegisterRequest);
        return userRegisterRequest;
    }
}

UserRegisterRequest

public class UserRegisterRequest {
    private String name;
    @NotNull
    @Min(1) //최소
    @Max(100) //최대
    private Integer age;// 문자가 아니기 때문에 NotBlank나 NotEmpty 사용 불가
    @Email
    private String email;
    //정규식 이용 문자열 지정
    @Pattern(regexp = "^\\d{2,3}-\\d{3,4}-\\d{4}$", message= "휴대폰 번호 양식이 일치하지 않습니다.")
    private String phoneNumber;
    @FutureOrPresent //현재 날짜와 같거나 미래의 날짜인지를 검증
    private LocalDateTime registerAt;
    @Size(min=2,max=12)//문자열의 최소 길이 지정(min 최소, max 최대)
    private String password;
}
profile
나의 개발 저장소

0개의 댓글