Rootable의 개발일기
@RequestBody와 @ResponseBody 본문
📌 @RequestBody
HTTP 요청 데이터 body를 조회할 때 사용하는 애노테이션
스프링MVC 내부에서 HTTP 메시지 바디를 읽어서 문자나 객체로 변환해서 전달해주는데, 이때 HttpMessageConverter라는 기능을 사용한다.
(@ResponseBody도 마찬가지)
🔎 단순 텍스트
@ResponseBody
@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody) {
log.info("messageBody={}", messageBody);
return "ok";
}
🔎 JSON
@ResponseBody
@PostMapping("/request-body-json-v3")
public String requestBodyJsonV3(@RequestBody HelloData data) {
log.info("username={}, age={}", data.getUsername(), data.getAge());
return "ok";
}
📌 @ResponseBody
return 하는 데이터 그대로 클라이언트에 내려주기 위해 사용하는 애노테이션
요청에 대한 응답을 주기 위해 HTTP 포맷을 사용하는데, ResponseBody는 HTTP 응답 body 부에 데이터를 심어준다.
여기서 내리는 데이터 형태가 문자라면 body 부에 그대로 적고, 객체라면 객체 자체가 JSON이라는 형태로 내려간다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
📌 @ResponseBody 동작 방식
1. @ResponseBody 가 달려있을 경우, viewResolver 대신 HttpMessageConverter 가 동작
2. 여러 가지 데이터 형태에 따라 HttpMessageConverter 가 등록되어 있다.
ex) 기본 문자 처리 -> StringConverter, 기본 객체 처리 -> JsonConverter
3. HttpMessageConverter 에 의해 문자열 또는 JSON 형태의 데이터가 HTTP 응답으로 내려감
💡 HttpMessageConverter 선택 기준
클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 종류가
선택된다.
📌 @RequestBody & @ResponseBody 세부 동작 방식
아래 글에서 확인할 수 있다.
👉 https://dev-rootable.tistory.com/79
Reference:
'Spring' 카테고리의 다른 글
Dependency Injection(DI)과 IoC(Inversion of Control) (0) | 2023.04.27 |
---|---|
Spring Test 관련 정리 (0) | 2023.04.27 |
Spring MVC 패턴 (0) | 2023.04.27 |
Spring Boot 동작 (SSR) (0) | 2023.04.26 |
Controller와 RestController (0) | 2023.04.26 |