RESTful(8) - @RequestBody & @ResponseBody란?
2019. 11. 26. 14:36ㆍ🔴 Spring
300x250
@RequestBody & @ResponseBody
-> 각각 HTTP 요청 몸체를 자바 객체로 변환하고 자바 객체를 HTTP 응답 몸체로 변환하는데 사용
@RequestBody
- HTTP 요청 몸체를 자바 객체로 전달받음
- HTTP 요청의 body내용을 자바 객체로 매핑하는 역할
@ResponseBody
- 자바 객체를 HTTP 응답 몸체로 전송함
- 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할
@RequestBody : HttpRequest body → (deserialization) → Java Object
ex. JSON → Java type
- HTTP요청의 본문 body부분이 그대로 전달됨
- HttpMessageConverter타입의 메시지 변환기 → HTTP요청의 미디어 타입 & 파라미터 타입을 먼저 확인 (servlet-context.xml 에서 <annotation-drvien> 태그 내에 선언하는 <message-converter> 에서 확인)한 다음, HTTP요청의 본문 부분을 통째로 변환해서 지정된 메소드 파라미터로 전달해줌
- 즉, HTTP요청 Body를 자바객체로 전달받을 수 있음
- 'GET'메소드 요청 → HTTP Body에 요청이 전달되는 것이 아니라 URL의 파라미터로 전달되는 형식 ⇒ @RequestBody로 받을 수 없음!
@ResponseBody : object → (serialization) → JSON → pass back into HttpResponse Object
ex. Java → JSON type
- 메소드 레벨에 부여되면 리턴되는 object는 view를 통해 결과를 만들어 내는 모델로 사용하는 대신, 메시지 변환기를 통해 바로 HTTP 응답의 메세지 본문으로 변환됨
- 요청한 형태에 맞춰서 메세지 변환기를 통해 결과값을 반환 (@ResponseBody는 @RequestBody가 선택한 형식으로 결과값을 변환하여 반환)
- 자바 객체를 HTTP 응답 body로 전송할 수 있음
- ContentNegotiatingViewResolver는 등록되어 있는 ViewResolver중에서 controller 메소드의 리턴값을 통해 등록된 ViewResolver 중에서 적합한 형태로 처리해서 반환하는 반면, @ResponseBody는 @RequestBody가 선택한 형식으로 결과값을 변환하여 반환한다고 보면 된다.
최근 개발 : 대부분 프론트엔드 & 백엔드 분리하여 개발
프론트엔드의 AJAX요청 → 대부분 JSON으로 되어 있음
⇒ 백엔드에서도 JSON형태로 응답해주는 방식을 취하게 됨!!
스프링은 이와 관련된 @MVC관련 annotation과 설정을 통해 기능을 제공하고 있음
300x250
'🔴 Spring' 카테고리의 다른 글
RESTful(10) - filter, interceptor (0) | 2020.07.08 |
---|---|
RESTful(9) - @RequestEntity, RestTemplate 사용하기 (0) | 2020.05.12 |
RESTful(7) - RESTful server구현해보기 (간단예제!) (0) | 2019.11.26 |
RESTful(6) - @ResponseBody써서 Json형태 객체로 반환해주기 + 상태값 설정 (0) | 2019.11.26 |
RESTful(5) - @JsonIgnore (0) | 2019.11.26 |