SPRING/스프링부트
@Valid vs @Validated 차이는?
추억을 백앤드하자
2025. 6. 4. 16:36
728x90
반응형
SMALL
@Valid vs @Validated 차이는?
항목 | @Valid | @Validated |
---|---|---|
제공 주체 | Java 표준(JSR-303 / 380) | Spring Framework |
검증 그룹 | ❌ 지원하지 않음 | ✅ 그룹 검증 지원 (groups = ... ) |
주 사용처 | 단순 검증 | 상황별 조건이 필요한 복잡한 검증 |
위치 | 컨트롤러, 메서드 파라미터 등 | 컨트롤러, 메서드, 클래스, 서비스 등 |
@Valid
는 단순 검증, @Validated
는 그룹 검증이 필요할 때 주로 사용됩니다
@Valid 사용 예제
import jakarta.validation.constraints.NotBlank;
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class UserProfileUpdateRequest {
@NotBlank(message = "전화번호는 필수 입력 값입니다.")
private String phone;
private String address;
private String email;
private String name;
}
import jakarta.validation.Valid;
@PutMapping
public ResponseEntity<UserProfileUpdateResponse> updateUser(@Valid @RequestBody UserProfileUpdateRequest updateRequest) {
log.info("request");
UserProfileUpdateResponse result = userProfileService.updateUser(updateRequest);
return ResponseEntity.ok(result);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException ex) {
String errorMsg = ex.getBindingResult().getFieldError().getDefaultMessage();
return ResponseEntity.badRequest().body(errorMsg);
}
@Validate 사용 예제
public interface OnCreate {}
public interface OnUpdate {}
@Getter
@Setter
public class UserCreateRequest {
@NotBlank(message = "이름은 필수입니다.", groups = OnCreate.class)
private String name;
@Email(message = "이메일 형식이 아닙니다.", groups = {OnCreate.class, OnUpdate.class})
private String email;
}
@PostMapping
public ResponseEntity<String> createUser(
@Validated(OnCreate.class) @RequestBody UserCreateRequest request) {
// OnCreate 그룹에 해당하는 유효성 검사만 실행됨
return ResponseEntity.ok("created");
}
@PutMapping
public ResponseEntity<String> updateUser(
@Validated(OnUpdate.class) @RequestBody UserCreateRequest request) {
// OnUpdate 그룹에 해당하는 유효성 검사만 실행됨
return ResponseEntity.ok("updated");
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException ex) {
String errorMsg = ex.getBindingResult().getFieldError().getDefaultMessage();
return ResponseEntity.badRequest().body(errorMsg);
}
728x90
반응형
LIST