Spring boot中的@RestController和@Controller区别

@RestController 和 @Controller 都是 Spring Framework 中用于定义控制器(Controller)的注解,但它们之间有一些关键的区别。

  1. 用途和返回类型:

    • @Controller:这是一个基础的注解,用于标记一个类作为 Spring MVC 控制器。使用 @Controller 注解的类中的方法通常返回 String 类型的视图名称,该名称对应于视图解析器(如 JSP、Thymeleaf 等)可以解析的视图。
    • @RestController:这是 @Controller 和 @ResponseBody 的组合。它用于创建 RESTful Web 服务。使用 @RestController 注解的类中的方法默认将返回值写入 HTTP 响应体中,并且这些方法通常返回 ResponseEntity、ResponseEntity<?>、HttpEntity<?>、Callable<?>、DeferredResult<?>、HttpHeaders、HttpStatus、HttpEntityStatusCodeException、ResponseBodyEmitter、SseEmitter、AsyncResult、ListenableFuture、CompletionStage、CompletableFuture 或 WebAsyncTask 等。但是,对于简单的返回值(如 String、JSON、XML 等),你也可以直接返回它们,并且 Spring 会自动使用 HttpMessageConverter 将其写入 HTTP 响应体。
  2. 响应体处理:

    • 使用 @Controller 注解的控制器方法需要显式地使用 @ResponseBody 注解来指示返回值应该写入 HTTP 响应体。
    • 使用 @RestController 注解的控制器方法则不需要这样做,因为 @RestController 已经隐含了 @ResponseBody 的功能。
  3. 默认行为:

    • 如果你在一个类上同时使用了 @Controller 和 @ResponseBody,那么该类实际上与仅使用 @RestController 是一样的。但是,为了代码的清晰性和可维护性,通常建议只使用其中一个。
    • 使用 @RestController 通常是为了快速构建 RESTful Web 服务,而使用 @Controller 则是为了构建更传统的基于视图的 MVC Web 应用程序。
  4. 其他注解:

    • 除了 @Controller 和 @RestController 之外,Spring 还提供了其他控制器注解,如 @RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 等,用于映射 HTTP 请求到特定的处理方法。这些注解可以与 @Controller 或 @RestController 一起使用。

总之,选择使用 @Controller 还是 @RestController 取决于你的应用程序类型和你想要实现的功能。如果你正在构建 RESTful Web 服务,那么 @RestController 可能是更好的选择。如果你正在构建基于视图的 MVC Web 应用程序,那么 @Controller 可能是更好的选择。

相关推荐
天空鸟_时光不老几秒前
06-给AI流程加一道人工闸门
java·人工智能·spring boot·后端·spring·spring cloud·架构
阿俊-全栈开发25 分钟前
LikeShop单商户Java商城如何从容承接高并发流量?
java·开发语言·spring boot·spring·系统架构
天空鸟_时光不老41 分钟前
01-我不转Python把AI塞进Java里
java·人工智能·spring boot·后端·spring·spring cloud·架构
SL_staff42 分钟前
3分钟零代码配置带审批流的报销单:JVS三引擎可视化串联实战
spring boot·开源·全栈
vx_Biye_Design1 小时前
flask学生课程笔记共享系统29026-计算机课程设计、毕业设计
java·javascript·spring boot·后端·elasticsearch·flask·课程设计
骑着蜗牛撵大象3271 小时前
SpringBoot+Vue3 企业智能体侧挂架构:独立服务、独立数据库与主线零侵入落地
数据库·spring boot·架构·vue·springboot·事件驱动·服务拆分
2501_933923252 小时前
SpringCloud:通过订单服务认识什么是微服务
spring boot·后端·spring cloud
天空鸟_时光不老2 小时前
07-检查点与状态持久化
java·人工智能·spring boot·spring·spring cloud·kafka·maven
程序猿_极客2 小时前
【免费】2026分享一套优质的基于Java的电子产品抢购管理系统的设计与实现(智能推荐算法+可视化图表),源码+文档+视频详解(讲解)
java·spring boot·后端·协同过滤·电子产品抢购系统
天空鸟_时光不老2 小时前
09-RAG问答系统落地:从默认分割器的坑到Milvus召回调优
java·人工智能·spring boot·spring·spring cloud·maven·mybatis