ReseponseBody VS ModelAttribute
클라이언트로부터 전송받은 데이터를 컨트롤러에서 객체에 바인딩(변환?)시
@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를 사용하면될것같다.