데이터의 유효성을 검증 후 유효하지 않은 경우 사용자에게 적절한 오류 메시지를 반환하는 프로세스
@NotNullnull x@NotEmptynull, empty("") x@NotBlanknull, empty(""), empty(" ")x@Size문자 길이 측정(int 타입 불가)@Pattern정규식 적용@Max최대값@Min최소값@FutureOrPresent현재 날짜와 같거나 미래의 날짜인지를 검증@Valid해당 클래스 Validation 실행
https://beanvalidation.org/2.0/

@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;
}
}
@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;
}


(name=, age=30, email=, phoneNumber=, registerAt=2024-03-17T19:14:05)
@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;
}
}
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;
}