-
ValidationBackEnd/Spring Boot 2022. 4. 6. 08:20반응형
Overview
해당 글에서는 유효성 검사를 위해 Validation API를 사용해 보겠습니다.
의존성 추가
// Gradle implementation 'org.springframework.boot:spring-boot-starter-validation' // Maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
유효성 검사를 할 필드에 애노테이션을 붙여줍니다. goodsName은 최소 5글자, 빈 문자열은 허용하지 않는다는 유효성을 추가합니다. 유효성 검사 실패 시 등록한 message로 예외를 던집니다.
package com.spring.springboot.domain; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Goods { private int goodsCode; @Size(min = 5, message = "상품명은 최소 5글자 입력해야 합니다.") @NotEmpty(message = "상품명은 필수 입력 항목입니다.") private String goodsName; }
Validation Annotation
자주 사용하는 애노테이션은 아래와 같습니다.
- @NotNull: Null을 허용하지 않습니다.
- @NotEmtpy: Null을 허용하지 않으며, ""도 허용하지 않습니다. " "는 허용이 됩니다.
- @NotBlank: Null을 허용하지 않으며, "" 및 " "도 허용하지 않습니다. 즉, 문자가 한 개 이상 포함되어야 합니다.
- @AssertTrue: True인지 확인합니다.
- @Size: 최소, 최대 사이즈를 지정합니다.
더 많은 애노테이션 확인은 아래 링크를 참고하시면 됩니다.
GoodsController에 신규 상품을 추가하는 API를 작성하고 @RequestBody 앞에 @Valid 애노테이션을 붙여줍니다.
package com.spring.springboot; import com.spring.springboot.domain.Goods; import com.spring.springboot.exception.GoodsNotFoundException; import javax.validation.Valid; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class GoodsController { @GetMapping(path = "/goods/{goodsCode}") // endpoint public Goods findGoods(@PathVariable int goodsCode) throws Exception { /* 생략 */ } @PostMapping(path = "/saveGoods") // endpoint public void createGoods(@Valid @RequestBody Goods goods) throws Exception { /* save logic */ System.out.println("Save: " + goods.getGoodsName()); } }
POST 요청을 위해 Postman을 사용합니다. Request 시 상품명을 4글자로 하고 호출을 하면 Status: 400 Bad Request 응답을 확인할 수 있습니다.
Exception Handling 처리를 위해 이전 글의 CustomizedResponseEntityExceptionHandler 파일에 handleMethodArgumentNotValid 메서드를 오버라이딩합니다.
package com.spring.springboot.exception; import java.util.Date; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; @RestController @ControllerAdvice public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(Exception.class) public final ResponseEntity<Object> handleAllExceptions(Exception e, WebRequest request) { /* 생략 */ } @ExceptionHandler(GoodsNotFoundException.class) public final ResponseEntity<Object> handleGoodsNotFoundExceptions(Exception e, WebRequest request) { /* 생략 */ } @Override protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Validation Failed", ex.getBindingResult().toString()); return new ResponseEntity(exceptionResponse, HttpStatus.BAD_REQUEST); } }
실행결과
반응형'BackEnd > Spring Boot' 카테고리의 다른 글
XML format (0) 2022.04.25 다국어 처리(Internationalization) (0) 2022.04.08 Exception Handling (0) 2022.04.05 Spring Boot 설정 및 동작 원리 (0) 2022.04.05 Spring Boot (0) 2022.04.02