일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- JAVA #객체지향언어 #절차지향언어 #코딩 #Python #C #C++ #객체지향 #절차지향
- 프로그래머스 #자바 #java #코딩테스트 #연속된 수의 합 #코딩
- 프로그래머스 #JAVA #코딩테스트 #다음에 올 숫자 #코딩
- Today
- Total
Javadocs
[Spring] @RequestBody와 @ResponseBody 본문
[Spring] @RequestBody와 @ResponseBody
Javatist 2023. 4. 9. 17:17@RequestBody와 @ResponseBody 어노테이션
Spring에서 비동기 처리를 하는 경우 @RequestBody와 @ResponseBody를 사용합니다.
Client와 Server의 비동기 통신
클라이언트에서 서버로 통신하는 메시지를 요청(Request) 메시지라고 하고, 서버에서 클라이언트로 통신하는 메시지를 응답(Response) 메시지라고 합니다.
웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어집니다. 이 비동기통신을 하기 위해서는 서버로 요청 메시지를 보낼 때, 본문에 데이터를 담아서 보내야 하고, 서버에서 클라이언트로 응답을 보낼 때도 본문에 데이터를 담아서 보내야 합니다. 여기서 본문이 'Body'입니다.
즉, 요청본문(RequestBody), 응답본문(ResponseBody)을 담아서 보내야 합니다.
대표적인 형태로는 JSON이 있습니다. 즉, 비동기식 클라이언트- 서버 통신을 위해 JSON 형식의 데이터를 주고 받습니다.
@RequestBody 어노테이션은 HTTP 요청의 Body 내용을 자바 객체로 매핑하는 역할을 하고,
@ResponseBody 어노테이션은 자바 객체를 HTTP 요청의 Body 내용으로 매핑하는 역할을 합니다.
요청 본문(RequestBody)에 담긴 값을 자바객체로 변환.
@RequestBody를 통해서 자바객체로 전환을 하는데, 이때 HttpMessageConverter를 사용합니다.
@ResponseBody가 붙은 파라미터에는 HTTP 요청의 본문 Body 부분이 그대로 전달됩니다.
@RequestBody
이 어노테이션이 붙은 파라미터에는 HTTP요청의 본문(Body)이 그대로 전달된다. 일반적인 GET / POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없을 것이다.
반면, xml이나 JSON기반의 메시지를 사용하는 요청의 경우 이방법이 매우 유용하다.
HTTP요청의 바디 내용을 전부 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다.
@ResponseBody
자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다. @ResponseBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어 타입과 파라미터의 타입을 먼저 확인을 한다.
즉, @Responsebody 어노테이션을 사용하면 http요청 body를 자바 객체로 전달받을 수 있다.
(# 클라이언트측에서 요청 데이터를 Body에 담고 content-type을 application/json으로 설정해줘야 동작한다.)
$.ajax({
url : '/replies/',
method : 'post',
data : JSON.stringify(reply),
contentType : 'apllication/json; charset=utf-8',
dataType :'json',
})
[ 예제 ]
@RestController
@RequestMapping("/replies/")
@RequiredArgsConstructor
public class ReplyController {
private final ReplyService replyService;
@PostMapping("")
// @ResponseBody
public ResponseEntity<Long> register(@RequestBody ReplyDTO replyDTO) {
Long rno = replyService.register(replyDTO);
return new ResponseEntity<>(rno, HttpStatus.OK);
}
}
위의 예제 코드에서는 JSON으로 들어오는 데이터를 자바 객체로 받기 위해서
@RequestBody를 사용했습니다.
@ResponseBody를 사용하지 않은 이유는 @RestController를 사용하였기 때문입니다.
@Controller와는 다르게 @RestController는 @ResponseBody가 포함되어 있어 HTTP 응답데이터(Body)에 자바 객체가 매핑되어 전달합니다.
( ※ @Controller인 경우에는 @ResponseBody를 적어줘야 합니다. )
[ 참고 ]
'Programming > Spring(코드로 배우는 스프링 웹 프로젝트)' 카테고리의 다른 글
[Spring] 스프링 빈(Bean)을 등록하는 두 가지 방법(@Conponent, @Bean) (0) | 2023.04.03 |
---|---|
[Spring] 의존성 주입 3가지 방법 - (생성자 주입, Field 주입, Setter 주입) (0) | 2023.03.29 |