유효성 검사란?
유효성 검사는 사용자가 입력한 데이터가 시스템에서 요구하는 조건에 맞는지 확인하는 절차를 말한다. 이는 시스템의 안정성을 유지하고, 오류를 사전에 방지하는 데 중요한 역할을 한다. 특히 사용자로부터 입력받은 데이터가 잘못된 형식일 경우, 해당 데이터가 시스템에 유입되지 않도록 필터링하는 데 사용된다.
Spring boot에서는 간단하게 dependency를 추가해줌으로써 사용할 수 있다.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
JavaBean 기반으로 간편하게 개별 데이터를 검증할 수 있으며, JavaBean내에 어노테이션으로 검증방법을 명시하면 된다.
Validation의 주요 어노테이션
ProductDto
productId와 productName에 NotNull 조건을 주고, productPrice와 productStock에는 0~10000의 값만 들어올 수 있게 설정
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
public class ProductDto {
@NotNull
private Long productId;
@NotNull
private String productName;
@NotNull
@Min(value = 0)
@Max(value = 10000)
private int productPrice;
@NotNull
@Min(value = 0)
@Max(value = 10000)
private int productStock;
public Product toEntity() {
return Product.builder()
.productId(productId)
.productName(productName)
.productPrice(productPrice)
.productStock(productStock)
.build();
}
}
ProductController
메소드의 매개변수쪽에 @Valid를 넣어주어야 한다.
@PostMapping(value = "/product")
public ResponseEntity<ProductDto> createProduct(@Valid @RequestBody ProductDto productDto) {
LOGGER.info("[createProduct] perform {} of Around Hub API.", "createProduct");
Long productId = productDto.getProductId();
String productName = productDto.getProductName();
int productPrice = productDto.getProductPrice();
int productStock = productDto.getProductStock();
ProductDto response = productService.saveProduct(productId, productName, productPrice, productStock);
LOGGER.info(
"[createProduct] Response >> productId : {}, productName : {}, productPrice : {}, productStock : {}",
response.getProductId(),
response.getProductName(),
response.getProductPrice(),
response.getProductStock());
return ResponseEntity.status(HttpStatus.OK).body(response);
}
Swagger를 통해 다음과 같이 요청을 보내면
productPrice 컬럼을 @Max(value = 10000)로 설정해놓았기 때문에,
아래와 같은 에러와 함께 400코드 값이 리턴되는 것을 확인할 수 있다.
List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='1000 이하여야 합니다', propertyPath=productPrice, rootBeanClass=class com.example.testproject.data.entity.Product, messageTemplate='{jakarta.validation.constraints.Max.message}'} ]
참고
'Spring' 카테고리의 다른 글
ResponseEntity란? (1) | 2024.09.15 |
---|---|
Spring boot의 예외처리 (1) | 2024.09.13 |
Logback이란? (1) | 2024.09.08 |
Spring Boot에서 JPA 사용하기 (0) | 2024.09.06 |
JPA란? (3) | 2024.09.01 |