Spring boot中的@RestController和@Controller区别

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

  1. 用途和返回类型

    • @Controller:这是一个基础的注解,用于标记一个类作为 Spring MVC 控制器。使用 @Controller 注解的类中的方法通常返回 String 类型的视图名称,该名称对应于视图解析器(如 JSP、Thymeleaf 等)可以解析的视图。
    • @RestController:这是 @Controller@ResponseBody 的组合。它用于创建 RESTful Web 服务。使用 @RestController 注解的类中的方法默认将返回值写入 HTTP 响应体中,并且这些方法通常返回 ResponseEntityResponseEntity<?>HttpEntity<?>Callable<?>DeferredResult<?>HttpHeadersHttpStatusHttpEntityStatusCodeExceptionResponseBodyEmitterSseEmitterAsyncResultListenableFutureCompletionStageCompletableFutureWebAsyncTask 等。但是,对于简单的返回值(如 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 可能是更好的选择。

相关推荐
EatFan12 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
凤山老林13 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
代码调试师15 小时前
【毕设分享】基于SpringBoot的旅游向导分配管理系统57145
spring boot·毕业设计·源码·课程设计·毕设·大作业·程序定制
2301_322414280415 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
vx_Biye_Design16 小时前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
专业程序开发源17 小时前
springbootLivehouse票务系统-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·pygame
卓怡学长17 小时前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea
梨涡泥窝19 小时前
JavaWeb——基于 Spring Boot + Vue 的图书管理系统的设计与实现
vue.js·spring boot·后端
隐退山林1 天前
JavaEE进阶:SpringBoot统一功能处理
java·spring boot·后端
loser.with.m1 天前
【AgentScope 2.0】8-MCP 集成:Agent 的「USB-C 接口」是怎么接的
人工智能·spring boot·agentscope