Today
-
Yesterday
-
Total
-
  • Spring Boot: @Controller , @RestController
    Spring Boot 🍃 2023. 11. 29. 06:21

    @Controller

    일반적인 Spring MVC 컨트롤러로, 주로 웹 페이지를 제공하는 데 사용된다.


    뷰 이름을 반환하며, ViewResolver에 의해 처리되어 실제 뷰로 변환되어진다.


    🐵. @Controller 에서 HTML 페이지 , json 객체 내려주는 방법

    @Controller 어노테이션이 붙은 컨트롤러 페이지에서는 html 뷰페이지만 내려보내고


    json 응답은 @RestController에서 내리는게 맞지만


    html과 json을 요구하는 특수한 상황(?)이 오게 된다면 사용할 수 있는 방법이다.


    @Controller
    public class PageController {
    
        // main.html 반환
        @RequestMapping("/main")
        public String main() {
            return "main.html";
        }
    
        // json 객체 반환
        @ResponseBody
        @GetMapping("/user")
        public User user() {
            var user = new User(); // 타입 추론! 클래스 이름이 아주 긴 경우 유용하게 쓰인다.
            user.setName("zh");
            user.setAge(130);
            return user;
        }
    }

    @RestController

    RESTful 웹 서비스 컨트롤러로, 주로 API를 제공하는 데 사용된다.


    반환 값이 자동으로 JSON, XML 등의 형식으로 직렬화되어 응답 본문에 포함된다!


    @RestController 예제

    1. String 반환

    @RestController 
    @RequestMapping("/api") 
    public class ApiController {
    
        @GetMapping("/hi") // localhost:8888/api/hi
        public String hi() { 
            return "하이 😆";
        }
    }


    2. 객체 반환

    반환할 객체 정의

    class Test {
        private String name;
        private String haha;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getHaha() {
            return haha;
        }
    
        public void setHaha(String haha) {
            this.haha = haha;
        }
    }

    controller 정의

    @RestController
    @RequestMapping("/api")
    public class ApiController {
    
        @GetMapping("/test") // localhost:8888/api/test
        public Test test() {
            Test test = new Test();
            test.setName("zhyun");
            test.setHaha("🙈");
            return test;
        }
    }

Designed by Tistory / Custom by 얼거스