Spring

스프링 어노테이션 @ModelAttribute vs @RequestBody

MKJo 2023. 9. 18. 00:06

@ModelAttribute와 @RequestBody모두 클라이언트의 요청을 처리하는 어노테이션이다.

 

@ModelAttribute의경우 HTTP의 요청파라미터(URL에 노출되는 GET방식 쿼리파라미터, POST방식으로 전송되는 Form)를 다룰때 사용

 

@RequestBody의경우 HTTP Body의 데이터를 객체로 변환하는데 사용한다. 주로 API JSON형태의 요청을 다룰 때 사용


스프링 검증어노테이션

@Validated 사용시 유의사항


@ModelAttribute는 필드(예를들어 DTO 멤버 변수)단위로 데이터가 바인딩된다. 어떠한 필드가 타입오류(Integer를 입력해야하지만 String입력값이 넘어옴)등으로  바인딩 되지 않아도 나머지 필드는 정상적으로 바인딩이되고, @Validated를 적용해 검증도 적용이 가능하다.

 

@RequestBody는 스프링에서 제공하는 컨버터(HttpMessageConverter)가 JSON 데이터를 해당 객체로 변경하지 못하면 컨트롤러가 호출되지도않고, @Validated를 통한 검증도 진행이 불가능하다.

이를 처리하는 방법은 추후에 포스팅 예정