[Spring-입문] @Responsebody 어노테이션

DANI·2023년 11월 14일

Spring[김영한T]

목록 보기
1/31
post-thumbnail

📕 HTTP(HyperText Transfer Protocol)란?

브라우저와 서버가 통신하기 위한 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 HTML(하이퍼텍스트) 문서를 주고받는 데 사용되는 통신 프로토콜이며 HTTP의 통신 방식은 기본적으로 '요청과 응답(request, response)'으로 이루어져 있는데요. 클라이언트가 요청(HttpRequest)을 서버에 보내면 서버는 클라이언트에게 응답(HttpResponse)하는 구조이다




💻 스프링 컨테이너 동작방식

  • 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리한다.
  • 스프링 부트 템플릿엔진 기본 viewName 매핑
    resources:templates/ +{ViewName}+ .html

클라이언트의 요청을 받으면 html파일로 응답해준다.


🔴 예시(HelloController)

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("name", "hello!!!");
        return "hello";
    }
}

🔴 예시(hello.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1><p th:text = ${name}>hello.html파일입니다.</p></h1>
</body>
</html>

🔵 응답화면




💻 스프링 컨테이너 동작방식(@ResponseBody)

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter 가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음


🔍 @ResponseBody

자바 객체를 json 기반의 HTTP Body로 변환해준다.
return Type에 맞는 MessageConverter를 통해 return 하는 객체를 해당 타입으로 변환해서 클라이언트로 전달해줌.

즉, body부분에 직접 데이터를 넣어주겠다는 의미

@RestController를 사용하는 경우 반환값에 자동으로 @ResponseBody 어노테이션이 붙게 된다. 따라서 자바 객체를 반환하면 알아서 Json 형식으로 매핑해서 응답한다.




🔴 예시(HelloController) : 문자열

@Controller
public class HelloController {

    @GetMapping("hellospring")
    @ResponseBody
    // 문자 반환 타입
    public String helllospring(@RequestParam(name = "name", required = false) String name){
        return name + "님 스프링에 오신 것을 환영합니다";
    }
}

🔵 응답화면

.html 파일이 아닌 문자열 그대로 body로 반환해준다.



🔴 예시(HelloController) : 객체

@Controller
public class HelloController {

    
    @GetMapping("helloapi")
    @ResponseBody
    // 객체 반환 타입
    public Hello helloapi(@RequestParam(name="hello") String hello, @RequestParam(name="hi") String hi){
        Hello hellos = new Hello();
        hellos.setHello(hello);
        hellos.setHi(hi);
        // 객체가 오면 제이슨으로 반환해줌
        return hellos;
    }

    // 객체 생성
    static class Hello{
        private String hello;
        private String hi;

        public void setHello(String hello) {
            this.hello = hello;
        }

        public String getHi() {

            return hi;
        }

        public void setHi(String hi) {
            this.hi = hi;
        }

        public String getHello() {
            return hello;
        }
    }
}

🔵 응답화면

객체는 json형태로 반환해준다!







✨ 이번 챕터에서 배운 부분

✅ @Responsebody어노테이션과 @RequestParam어노테이션

📝 공부할 부분

✅ @Requestbody에 대해서도 알아보자!

0개의 댓글