跳转至

@Controller 与 @RestController 的区别

一、@Controller

传统 MVC:

@Controller
public class MyController {
    @GetMapping("/page")
    public String page() {
        return "index";   // 返回视图名
    }
}

返回值会被 ViewResolver 解析成页面。

二、@RestController

= @Controller + @ResponseBody:

@RestController
public class ApiController {
    @GetMapping("/api")
    public User api() {
        return new User();   // 直接序列化成 JSON
    }
}

三、区别

@Controller @RestController
返回视图
返回 JSON 需加 @ResponseBody 默认
用于 前后端不分离 前后端分离

四、@RestController 本质

@Controller
@ResponseBody
public @interface RestController {}

就是组合注解。

面试要点

前后端分离用 @RestController,SSR/模板引擎用 @Controller。