본문 바로가기
프레임워크/스프링

[Spring Boot] API VALIDATION

by Yikanghee 2022. 3. 7.

API VALIDATION

  • JSON 데이터를 받아서 오류검출하는 과정을 살펴보자
@Data
public class ItemSaveForm {

    @NotBlank
    //빈값 + 공백만 있는 경우를 허용하지 않음
    private String itemName;

    @NotNull
    @Range(min = 1000, max = 1000000)
    //빈값 + 공백만 있는 경우를 허용하지 않음
    //정해진 범위 안의 값이어야 한다
    private Integer price;

    @NotNull
    @Max(value = 9999)
    //정해진 최대값 내에 있어야 한다다
   private Integer quantity;

}

객체 설정을 해준다

제약 조건을 어노테이션 형식으로 지정해준다

@Slf4j
@RestController
@RequestMapping("validation/api/items")
public class ValidationItemApiController {

    @PostMapping("/add")
    public Object addItem(@RequestBody  @Validated ItemSaveForm form, BindingResult bindingResult) {

        log.info("API 컨트롤러 호출");

        if (bindingResult.hasErrors()) {
            log.info("검증 오류 발생 errors={}", bindingResult);
            return bindingResult.getAllErrors();
        }

        log.info("성공 로직 실행");
        return form;
    }

    //@RequestBody -> HTTP 메시지 바디를 직접 조회하는 기능
    //@RestController -> 클래스에 해당하는 모든 컨트롤러에 @ResponseBody 기능

}

위와 같이 코드를 재작해주고 POST 형식으로 JSON을 보내주면 3가지 결과를 얻을 수 있다

성공 : 성공

실패 요청 : JSON을 객체로 생성하는 것을 실패 → 지정해준 형식과 다르게 요청이와서 실패 (객체 생성 실패)

검증 오류 요청 : JSON을 객체로 생성하는 것은 성공했고, 검증에서 실패함 → Validator에서 오류가 발생

결론 : HttpMessageConverter는 @ModelAttribute와 다르게 각각의 필드 단위로 적용되는 것이 아니라, 전체 객체 단위로 적용된다.

따라서 메시지 컨버터의 작동이 성공해서 객체를 만들어야 Valid, Validated 가 적용된다

댓글