웹에서 이루어지는 데이터 통신은 클라이언트와 서버간에 이루어지고 이때 중요한 것이 요청(Request)와 응답(Response)입니다.
비동기 통신을 위해서는 요청메시지와 응답메시지를 Body에 담아 보내야하는데 데이터의 형식은 JSON으로 설정합니다.
이때 @RequestBody와 @ResponseBody를 사용합니다.
HttpServleRequest를 이용해 데이터를 가져오면 굳이 @RequestBody가 필요하지 않지만 VO, DTO를 사용해 데이터를 받기위해서는 사용해야 합니다.
🎈 @RequestBody
클라이언트 >> 서버
데이터를 전송할 때 JSON형태로 데이터를 만들어 요청하면 서버에서는 @RequestBody를 이용해
HTTP요청 body에 담김 값들을 자바 객체로 변환시켜 객체에 저장시킨다.
🎈 @ResponseBody
서버 >> 클라이언트
@ResponseBody를 이용해 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다.
값을 주입하지 않고 변환 시키므로 변수들의 생성자, Getter, Setter가 없어도 정상적으로 할당됩니다.
🎈 1개의 HTTP 요청 파라미터를 받기 위해 사용
필수여부가 True여서 기본적으로 반드시 해당 파라미터가 전송되어하는데 전송되지 않으면 400 Error를 유발할 수 있습니다.
반드시 필요한 변수가 아니라면 required값을 false로 설정해주어야합니다.
🎈 HTTP Body내용과 HTTP파라미터의 값들을 생성자, Getter, Setter를 통해 주입하기 위해 사용
값 변환이 아닌 값을 주입시키므로 변수들의 생성자나 Getter, Setter가 없으면 저장되지 않습니다.
@ModelAttribute는 파라미터 기반의 요청을 처리하므로 데이터를 파라미터로 넘겨주면 ajax요청도 @ModelAttribute로 받을 수 있습니다.
get방식처럼 url에 데이터를 넣어 전달하게 되는데 좋지 않은 방법입니다.
따라서 ajax요청을 @ModelAttribute로 처리하기 위해서는 FormData를 사용하고 ajax를 통해 file 업로드를 처리할 때는 FormData를 통해 처리하고 서버는 @ModelAttribute로 받아야합니다.
@RequestBody | @RequestParam | @ModelAttribute | |
---|---|---|---|
값 | 주입이 아닌 변환 | 변환이 아닌 주입 | |
생성자, Getter, Setter | 없어도 정상적으로 할당 | 없으면 변수 저장 X | |
역할 | JSON형태를 Java Object로 변환 | 1개의 HTTP요청 파라미터 | HTTP Body와 HTTP 파라미터 값들을 주입 |
📒참고
@RequestBody와 @ResponseBody란?
@ModelAttribute vs @RequestBody