김영한님 인강듣고/스프링 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단계에서 실패하면 예외가 발생한다. 예외 발생시 원하는 모양으로 예외 처리 가능