ReseponseBody VS ModelAttribute

최대 1 분 소요

클라이언트로부터 전송받은 데이터를 컨트롤러에서 객체에 바인딩(변환?)시
@RequestBody와 @ModelAttribute를 사용하는데
이 둘의 미묘(?)한 차이를 정리하기위해 포스팅.

결론

@RequestBody :

JSON data를 자바객체로 “변환” 시에 사용.

@ModelAttribute :

form data를 자바객체로 “바인딩”(할당) 시 사용.

MessageConverter

스프링은 여러형태의 MessageConverter를 소유하고있다.

FormHttpMessageConverter
MappingJacksonHttpMessageConverter

차이

@RequestBody

Setter 필요없음
@RequestBody에 사용되는 MessageConverter(MappingJacksonHttpMessageConverter)의 매커니즘은
객체에 바인딩하지 않고 변환 하기때문이다.
미디어타입 : application/json

@ModelAttribute

Setter 필요
@ModelAttribute에 사용되는 MessageConverter(FormHttpMessageConverter)의 매커니즘은
객체에 직접적으로 바인딩하기 때문이다.
미디어타입 : application/x-www-form-urlencoded

느낀점

경우에따라 form data를 받을땐 @ModelAttribute를,
JSON data를 받을땐 @RequestBody를 사용하면될것같다.

카테고리:

업데이트: