본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : Bean Validation HTTP message Converter

by 오주현 2022. 2. 17.
반응형

@Valid와 @Validated는 HttpMessageConverter(@RequestBody)에도 적용할 수 있다.

 

@ModelAttrubute는 HTTP 요청 파라미터(URP 쿼리 스트링, POST Form)를 다룰 때 사용하고 @RequestBody는 HTTP Body의 데이터를 객체로 변환할 때 사용한다.

 

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

    @PostMapping("/add")
    public Object addItem(@RequestBody @Validated ItemSaveForm form, BindingResult bindingResult) {
        log.info("API 컨트롤러 호출");

이렇게 컨트롤러를 만들어주고 PostMan을 사용해서 테스트를 했다.

 

Json으로 보냈는데 API경우 3가지 경우를 나눠 생각해야 한다고 한다. 성공 요청을 성공하는 것과 실패 요청을 JSON을 객체로 생성하는 것 자체가 실패한 것과 검증 오류 요청을 JSON을 객체로 생성하는 것은 성공했지만 검증에서 실패한 것 이렇게 3개이다.

 

결과적으로는 모두 다 테스트를 해 봤는데 @ModelAttribute와 @RequestBody 차이에 있었다.

 

HTTP 요청을 처리하는 @ModelAttribute는 필드 단위로 세밀하게 적용되어 특정 필드에 타입이 맞지 않는 오류가 발생해도 나머지 필드는 정상적으로 처리할 수 있었다.

 

는 @ModelAttribute와 다르게 전체 객체 단위로 적용되기 때문에 컨버터의 작동이 성공해서 Item 객체를 만들어야 @Valid와 @Validated가 적용이 되었다.

 

즉, DTO 객체에서 정의한 값과 맞지 않으면 컨트롤러 호출 자체가 되지 않았고, 값과 맞춰야 성공을 했다. 값과 맞췄는데 실패하는 경우는 검증에서 실패한 경우이다.

 


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글