Everyday Dev System

@RestController 와 @Controller의 차이 본문

내배캠 주요 학습/Spring 입문

@RestController 와 @Controller의 차이

chaeyoung- 2023. 6. 13. 11:42

 

1. @RestController 란? -> Controller + ResponseBody

클래스에 @RestController를 달아주면, 메서드별로 @ResponseBody를 각각 기재할 필요가 없습니다.

** html을 반환 할 경우에 @ResponseBody 미기재

   데이터를 반환할 때는 @ResponseBody 반드시 기재

package com.sparta.springmvc.response;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/response/rest")
public class ResponseRestController {
    
    @GetMapping("/json/string")
    public String helloStringJson() {
        return "{\"name\":\"Robbie\",\"age\":95}";
    }
    
    @GetMapping("/json/class")
    public Star helloClassJson() {
        return new Star("Robbie", 95);
    }
}

 

2. @Controller 적용 시점

@Controller 어노테이션이 붙어있는 클래스의 메서드들은 html 형식 혹은 데이터를 반환합니다.

html 형식을 반환하는 메서드에는 @ResponseBody를 기재하지 않고,

데이터를 반환하는 메서드에는 @ResponseBody를 반드시 기재하여야 합니다.

 

3. @RestController 적용 시점

@RestController는 클래스 내에 html을 반환하는 메서드는 안되며, 데이터를 반환하는 메서드만 포함할 수 있습니다.

클래스 내에 데이터를 반환하는 메서드만 있는 경우 @RestController를 클래스에 기재하여 메서드에 @ResponseBody를 기재하지 않아도 됩니다.

그러나 클래스 내에 메서드 중 하나라도 html 형태를 반환하고자 한다면, @RestController -> @Controller로 변경해야 합니다. 또한 데이터를 반환하는 메서드에는 모두 @ResponseBody 어노테이션을 기재해주어야 합니다.

 

주로 @Controller는 프론트엔드 개발자 분이 작성을 하고, 

@RestController는 백엔드 개발자가 데이터를 받아서 가공하고 반환할 때 많이 씁니다.