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
'SPRING > 스프링부트' 카테고리의 다른 글
| 트랜잭션 사용법과 예제 in Spring (0) | 2025.04.21 |
|---|---|
| ApplicationEventPublisher, @EventListener 사용하여 동기,강결합된 기능 리펙토링 하기 (0) | 2025.04.02 |
| @MockBean vs @Mock,@InjectMocks (1) | 2025.01.06 |
| Spring에서 request에 대한 검증 방법 2가지 (0) | 2024.05.07 |
| RestTemplate, Spring MVC vs WebClient, Spring WebFlux 성능테스트 (0) | 2024.04.04 |