일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 배열
- 오류
- Ajax
- web.xml
- 암호화
- select
- Database
- 함수
- 개념
- eGovFramework
- sql
- controller
- Oracle
- POI
- TO_DATE
- html
- eGov
- input
- CSS
- javascript
- spring
- jQuery
- 과정평가형
- Java
- json
- was
- array
- 태그
- JVM
- mybatis
- Today
- Total
web developer
[java] @RequestBody , @ResponseBody 어노테이션 본문
@RequestBody , @ResponseBody 어노테이션
스프링에서 비동기 처리를 하는 경우 @RequestBody , @ResponseBody를 사용한다.
비동기 처리를 위해 이 어노테이션들은 어떻게 작동할까?
클라이언트와 서버의 비동기 통신
클라이언트에서 서버로 통신하는 메시지를 요청(request) 메시지라고 하며, 서버에서 클라이언트로 통신하는 메시지를 응답(response) 메시지라고 한다.
웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다.
1-1. 비동기통신을 하기 위해서 해야할 것은?
클라이언트에서 서버로 요청 메세지를 보낼 때는? 혹은 서버에서 클라이언트로 응답을 보낼 떄는?
본문에 데이터를 담아서 보내야 한다. 이 본문이 body 이다.
요청 본문은 requestBody, 응답 본문은 responseBody에 담아서 보내야 한다.
1-2. 이때 본문에 담기는 데이터 형식은 여러가지가 있지만, 가장 대표적으로 사용되는 것은?
이는 JSON 이다. 비동기식 클라이언트-서버간의 통신을 위해 JSON 형식의 데이터를 주고받는 것이다.
- 키와 값(key-value) 한쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷이다.
- http통신 시 데이터를 주고받을 때 흔히 쓰이는 데이터 포맷 (josn, xml... ) 중 하나이다.
- 비동기식 통신(ajax)을 위해, 넓게는 xml을 대체하는 주요 데이터 포맷이다.
- 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다.
- 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.
var json={"key1":"value1" , "key2":"value2"}
스프링 MVC에서도 클라이언트에서 전송한 xml데이터나 json 등 데이터를 컨트롤러에서 DOM객체나 자바객체로 변환해서 송수신할 수 있다.
1-3. 본문에 데이터를 담기 위해서 사용하는 어노테이션은?
@RequestBody 어노테이션은 HTTP요청(request) 바디를 자바객체로 변환한다.
@ResponseBody 어노테이션은 자바객체를 HTTP 응답(response) 바디로 변환해준다.
@RequestBody
@RequestBody 어노테이션이 붙은 파라미터에는 http요청의 본문(body)이 그대로 전달된다. 일반적인 GET/POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없을 것이다.
반면에 xml이나 json기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.
HTTP 요청의 본문(body)을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다. (json → String / 객체)
JSON요청 데이터 → HTTP메시지 컨버터 → 객체 (@RequestBody HelloData helloData) => ObjectMapper의 역할 대체 생략 불가능
@ResponseBody
@ResponseBody 어노테이션은 자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.
@ResponseBody 가 붙은 파라미터가 있으면 HTTP요청의 미디어타입과 파라미터의 타입을 먼저 확인한다.
dispatcher-servlet.xml 의 <annotation-drvien> 태그 내에 선언하는 <message-converter> 에서 확인.
메세지 변환기 중에서 해당 미디어타입과 파라미터 타입을 처리할 수 있다면, HTTP요청의 본문 부분을 통째로 변환해서 지정된 메소드 파라미터로 전달해준다.
@Responsebody 어노테이션을 사용하면 http요청의 본문(body)을 자바 객체로 전달받을 수 있다.
컨트롤러의 처리 결과를 HTTP 바디에 직접 넣어서 전달 가능 (String / 객체 → json)
객체 → HTTP메시지 컨버터 → JSON응답 데이터
@RequestBody, @ResponseBody 정리
1-1. 클라이언트 → 서버 : @RequestBody
클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜, 객체에 저장한다.
1-2. 서버 → 클라이언트 : @ResponseBody
서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다.
출처 : https://cheershennah.tistory.com/179
출처 : https://ocblog.tistory.com/49
출처 : https://zzznara2.tistory.com/761 [@RequestBody]
'Framework > Spring [java]' 카테고리의 다른 글
[java] Model, ModelMap, ModelAndView (2) | 2023.01.10 |
---|---|
스프링 MVC 구조와 패턴 (2) | 2022.11.06 |
[spring] 파일 관련 기능: 업로드, 다운로드, 게시글 등록 및 수정, 삭제 (0) | 2022.01.05 |
[spring] Spring IOC, IOC Container ,DI 의미 (0) | 2021.12.23 |
[spring] web.xml (0) | 2021.12.23 |