관리 메뉴

Rootable의 개발일기

@RequestBody와 @ResponseBody 본문

Spring

@RequestBody와 @ResponseBody

dev-rootable 2023. 4. 27. 13:06

📌 @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";
    }

 

요청 스펙

 

정해진 형식 없이 body의 내용을 그대로 가져온다.

 

🔎 JSON

 

    @ResponseBody
    @PostMapping("/request-body-json-v3")
    public String requestBodyJsonV3(@RequestBody HelloData data) {
        log.info("username={}, age={}", data.getUsername(), data.getAge());
        return "ok";
    }

 

요청 스펙

 

JSON 형식의 body를 원하는 객체로 파싱

 

📌 @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 동작 방식

 

출처:스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 by 김영한

 

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

 

요청 매핑 핸들러 어뎁터 구조

📌 개요 스프링 MVC 구조에서 요청이 들어오면 가장 먼저 Dispatcher Servlet에서 요청과 매핑되는 핸들러를 찾는다. 이 핸들러를 실행하는 주체는 HandlerAdapter다. 그래서 Dispatcher Servlet은 매핑된 핸들

dev-rootable.tistory.com

 

Reference:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

'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