본문 바로가기

Language/Spring

[Spring] Controller와 Rest Controller 차이

Controller의 역할 및 특징

 

  • 역할
    • 뷰(View)를 반환하는 컨트롤러.
  • 주요 특징
    • 주로 HTML, JSP 같은 뷰 페이지를 반환
    • @RequestMapping 또는 @GetMapping, @PostMapping 등의 어노테이션을 사용해 HTTP 요청을 매핑
    • Model 객체를 이용하여 데이터와 뷰를 연결
    • 반환값이 문자열(String)일 경우 기본적으로 ViewResolver가 실행되어 해당 문자열을 뷰 이름(view name)으로 간주하고, 뷰를 렌더링
@Controller
public class ExampleController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "hello"; // ViewResolver에 의해 "hello.jsp" 또는 "hello.html"로 매핑
    }
}
  • 응답 결과
    1. 브라우저에서 /hello 요청
    2. hello.jsp 또는 hello.html과 같은 뷰 페이지가 렌더링되어 클라이언트에게 반환

RestController의 역할 및 특징

 

  • 역할
    • JSON 또는 XML 등의 데이터를 반환하는 컨트롤러.
  • 주요 특징
    • HTTP Response Body데이터를 직접 반환
    • @Controller와 다르게 @ResponseBody가 기본적으로 포함
    • 주로 REST API를 구현할 때 사용
    • 반환값문자열, 객체, 또는 컬렉션 등이 가능하며, Jackson 라이브러리에 의해 JSON 또는 XML로 직렬화
@RestController
public class ExampleRestController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }

    @GetMapping("/user")
    public User user() {
        return new User("Kim", 30); // JSON으로 변환되어 반환
    }
}

 

  • 응답 결과
    1. 브라우저에서 /hello 요청 → "Hello, World!" 문자열이 그대로 반환
    2. /user 요청{"name": "Kim", "age": 30}과 같은 JSON 데이터가 반환

Controller와 RestController 차이점 비교표
특징 @Controller @RestController
주요 목적 뷰(View) 렌더링 JSON, XML 등의 데이터 반환
ResponseBody 명시적으로 사용(@ResponseBody) 자동 포함(@ResponseBody 내장)
주로 사용되는 곳 웹 애플리케이션의 UI와 뷰 처리 RESTful API 개발
반환 값 처리 방식 반환 값이 뷰 이름으로 해석
(ViewResolver 작동)
반환 값을 JSON/XML로 변환하여 응답 본문에 포함