티스토리 뷰
728x90
반응형
아래는 @Valid와 @Validated를 어떻게 구분해서 사용하는지에 대한 샘플 코드입니다.
- @Valid는 JSR-380 표준 애너테이션으로, 주로 RequestBody나 ModelAttribute 등 Bean 객체의 필드 유효성 검증에 사용됩니다.
- @Validated는 Spring에서 제공하는 애너테이션으로, 메서드 레벨(@PathVariable, @RequestParam 등) 유효성 검증과 함께 그룹 기능을 지원합니다.
단, 메서드 매개변수에 직접 제약 조건을 사용하려면 컨트롤러 클래스에 @Validated를 추가해야 합니다.
UserDto.java
package com.example.demo.dto;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
/**
* 사용자 정보 DTO (Request Body로 전달)
*/
@Getter
@Setter
public class UserDto {
@NotBlank(message = "Username is required")
private String username;
@Min(value = 18, message = "Age must be at least 18")
private int age;
}
UserController.java
package com.example.demo.controller;
import com.example.demo.dto.UserDto;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
/**
* 사용자 관련 컨트롤러
*
* 클래스에 @Validated를 선언하여, @PathVariable이나 @RequestParam 등
* 단순 타입의 매개변수에 대한 유효성 검증을 활성화합니다.
*/
@RestController
@RequestMapping("/api/users")
@Validated
public class UserController {
/**
* Request Body에 전달된 UserDto 객체를 @Valid로 검증합니다.
*
* @param userDto 사용자 정보 (JSON 형식)
* @return 성공 메시지
*/
@PostMapping
public String createUser(@RequestBody @Valid UserDto userDto) {
// userDto의 각 필드는 @NotBlank, @Min 등의 제약 조건에 의해 검증됩니다.
return "User created: " + userDto.getUsername();
}
/**
* URL Path Variable을 통해 전달된 id를 검증합니다.
*
* @param id 사용자 ID (1 이상이어야 함)
* @return 사용자 ID에 대한 메시지
*/
@GetMapping("/{id}")
public String getUserById(@PathVariable @NotNull(message = "ID is required") @Min(value = 1, message = "ID must be greater than 0") Long id) {
// @Validated가 선언되어 있어, 단순 타입 매개변수의 제약 조건(@NotNull, @Min)이 활성화됩니다.
return "User with ID: " + id;
}
}
설명:
- @Valid
- createUser 메서드에서 @RequestBody로 전달되는 UserDto 객체의 필드에 대해 @Valid가 작동합니다.
- UserDto의 username, age 필드에 지정한 제약 조건이 Bean Validation 표준에 따라 검증됩니다.
- @Validated
- 컨트롤러 클래스에 @Validated를 선언하면, 메서드 매개변수(여기서는 @PathVariable id)에 직접 붙인 제약 조건(@NotNull, @Min)이 동작합니다.
- 이 방식은 단순 타입(예: Long, String 등)에 대한 유효성 검증에 필요하며, @Valid는 Bean 객체에만 적용되기 때문에 별도로 @Validated가 필요합니다.
이와 같이 @Valid와 @Validated를 상황에 맞게 사용하면, 클라이언트로부터 전달받은 데이터의 유효성을 효과적으로 검증할 수 있습니다.
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- java 키워드 정리
- jstl(java standard tag library)
- docker
- java.sql
- 스프링 시큐리티(spring security)-http basic 인증
- 제품 등록
- 인텔리제이(intellij)
- 특정 문자를 기준으로 자르기
- MainActor
- System.Diagnostics
- In App Purchase
- error-java
- 표현 언어(expression language)
- .submit()
- jsp 오픈 소스
- 문자 자르기
- 스프링 프레임워크(spring framewordk)
- java web-mvc
- nl2br
- java-개발 환경 설정하기
- 메이븐(maven)
- 람다식(lambda expression)
- 스프링 시큐리티(spring security)
- await
- system.io
- React
- REST API
- jstl(java standard tag library)-core
- 진수 변환
- 스프링 프레임워크(spring framework)
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함