@RequestBody
Json형식으로 데이터를 보내면 Java객체로 변환 시켜준다.
@RequestBody를 사용하면 요청 본문의 JSON, XML, Text 등의 데이터가 적합한 HttpMessageConverter를 통해 파싱되어 Java 객체로 변환 되며 @RequestBody를 사용할 객체는 필드를 바인딩할 생성자나 setter 메서드가 필요없다.
@RequestParam
form 태그를 이용하여 데이터를 입력하고 제출 버튼을 누르면 입력한 데이터들이 url을 통해서 전달된다.
@RequestParam 은 url 상에서 데이터를 찾기 때문에 <form> 태그를 이용하여 데이터를 입력하고 제출 버튼을 누르면 입력한 데이터들이 url을 통해서 전달된다. 예를 들면 'http://localhost:8080/receive?name=jun&age=13' 이런 식이다.
그렇기에 Json 형식으로 데이터를 전달할때 url은 변함이 없고, body에 데이터를 포함하여 전송하기 때문에 @RequestParam 으로는 받을 수 없다.
@ModelAttribute
@ModelAttribute를 사용하면 HTTP 파라미터 데이터를 Java 객체에 맵핑한다. 따라서 객체의 필드에 접근해 데이터를 바인딩할 수 있는 생성자 혹은 setter 메서드가 필요하다.
@ModelAttribute는 바인딩하는 값들을 주입해주는 생성자나 Setter가 없다면 매핑이 되지 않는다.