Spring 입문

<Spring 입문> 3.3 스프링 웹 개발 기초_API

Isaac01 2025. 4. 17. 12:32
반응형

경로: src > main > java > ... > controller > HelloController

@Controller
public class HelloController {
    // 문자가 반환 될 경우
    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello" + name;
    }
    // 객체가 반환 될 경우
    @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 String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

 

경로: src > main > resources > templates > hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>

 

 


 

@ResponseBody를 사용

@ResponseBody는 컨트롤러 메서드의 반환값을 "화면(html)"이 아닌 "데이터 자체로" 클라이언트에게 전달하라는 뜻

 

예시 1: 일반 컨트롤러 (뷰 반환)

@Controller
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";  // hello.html이라는 뷰 템플릿을 찾아서 응답
    }
}

 

예시 2: @ResponseBody 사용, 문자 반환

@Controller
public class HelloController {
    @ResponseBody
    @GetMapping("/hello-string")
    public String helloString() {
        return "hello world";  // "hello world"라는 텍스트 자체가 브라우저에 응답됨
    }
}

 

 

 예시 3: @ResponseBody 사용, 객체 반환 → JSON 응답

@Controller
public class HelloController {
    @ResponseBody
    @GetMapping("/hello-api")
    public Hello helloApi() {
        Hello hello = new Hello();
        hello.setName("자바");
        return hello;  // {"name":"자바"} 라는 JSON 데이터로 응답됨
    }

    static class Hello {
        private String name;
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    }
}

 

 

@ResposeBody를 사용함으로써 ViewResolver 대신에 HttpMessageConverter가 동작

  • HttpMessageConverter는 기본 문자를 처리하는 StringConverter과 기본 객체를 처리하는 JsonConverter가 있다.
    • StringConverter가 사용되면 문자 HTTP 응답 본문에 포함
    • JsonConverter 가 사용되면 객체 HTTP 응답 본문에 포함