简而言之,@RestController与@Controller都用来表示控制器,但是@RestController是@Controller的衍生类(拓展),实际上@RestController=@Controller+@ResponseBody
@Controller
@Controller是Spring框架提供的注解,通过它标识的类,代表控制器类(控制层/表现层)。这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),而@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类(Dao层/持久层)。
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC的Controller类,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。@RequestMapping给出外界访问方法的路径,或者说触发路径,触发条件。
@ResponseBody标记Controller类中的方法。把return的结果变成JSON对象返回。如果没有这个注解,这个方法只能返回要跳转的路径,即跳转的页面。有这个注解,可以不跳转页面,只返回JSON数据。
注:JSON对象:JSON 指的是 JavaScript 对象表示法
关于java中JSON的使用:java中JSON的使用(4种解析方式,满满干货)_java json用法_IT萧然的博客-CSDN博客
SpringBoot系列(5):SpringBoot对JSON数据的处理_spring-boot-starter-json_洒家肉山大魔王的博客-CSDN博客
@RestController
@RestController是Spring4.0之后新增的注解。相当于@Controller+@ResponseBody合在一起的作用。
相关注解说明:
在 Spring Boot 中使用到 @Controller 及相关的注解如下,主要分为三个层面进行,请求前,处理中,返回。
应用场景 | 注解 | 注解说明 |
---|---|---|
处理请求 | @Controller | 处理 Http 请求 |
处理请求 | @RestController | @Controller 的衍生注解 |
路由请求 | @RequestMapping | 路由请求 可以设置各种操作方法 |
路由请求 | @GetMapping | GET 方法的路由 |
路由请求 | @PostMapping | POST 方法的路由 |
路由请求 | @PutMapping | PUT 方法的路由 |
路由请求 | @DeleteMapping | DELETE 方法的路由 |
请求参数 | @PathVariable | 处理请求 url 路径中的参数 /user/ |
请求参数 | @RequestParam | 处理问号后面的参数 |
请求参数 | @RequestBody | 请求参数以json格式提交 |
返回参数 | @ResponseBody | 返回 json 格式 |
-
@Controller 一般应用在有返回界面的应用场景下.
例如,管理后台使用了 thymeleaf 作为模板开发,需要从后台直接返回 Model 对象到前台,那么这时候就需要使用 @Controller 来注解。
-
@RestController 如果只是接口,那么就用 RestController 来注解.
例如前端页面全部使用了 Html、Jquery来开发,通过 Ajax 请求服务端接口,那么接口就使用 @RestController 统一注解。