김영한님 인강듣고/스프링 MVC

API에서( @RestController + @RequestBody ) BeanValidation

doriver 2024. 8. 17. 16:48

API에서 ( @RestController + @RequestBody ) BeanValidation 결과

* 성공
* JSON을 객체로 생성하는 것 자체가 실패( 컨트롤러 호출x ) > 예외발생으로 분류
* JSON을 객체로 생성하는 것은 성공했고, 검증에서 실패 > 검증에러 리턴

@ModelAttribute  vs   @RequestBody   ,  HttpMessageConverter

@ModelAttribute 는 필드 단위로 정교하게 바인딩이 적용된다. 
특정 필드에 타입이 맞지 않는 오류가 발생해도 나머지 필드는 정상 바인딩 되고, Validator를 사용한 검증도 적용할 수 있다.

@RequestBody는 HttpMessageConverter 단계에서 JSON데이터를 객체로 변경하지 못하면 이후 단계 자체가 진행되지 않고 예외가 발생한다. 컨트롤러도 호출되지 않고, Validator도 적용할 수 없다

HttpMessageConverter 는 @ModelAttribute 와 다르게 각각의 필드 단위로 적용되는 것이 아니라, 전체 객체단위로 적용된다
메시지 컨버터의 작동이 성공해서 Bean객체를 만들어야 @Valid , @Validated 가 적용된다

HttpMessageConverter단계에서 실패하면 예외가 발생한다. 예외 발생시 원하는 모양으로 예외 처리 가능