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 可能是更好的选择。

相关推荐
奈葵6 分钟前
Spring Boot/MVC
java·数据库·spring boot
落霞的思绪6 分钟前
Redis实战(黑马点评)——涉及session、redis存储验证码,双拦截器处理请求
spring boot·redis·缓存
liuyunshengsir1 小时前
Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能
java·spring boot·prometheus
何中应1 小时前
Spring Boot中选择性加载Bean的几种方式
java·spring boot·后端
2013crazy2 小时前
Java 基于 SpringBoot+Vue 的校园兼职平台(附源码、部署、文档)
java·vue.js·spring boot·兼职平台·校园兼职·兼职发布平台
michael.csdn2 小时前
Spring Boot & MyBatis Plus 版本兼容问题(记录)
spring boot·后端·mybatis plus
万物皆字节3 小时前
Springboot3 自动装配流程与核心文件:imports文件
spring boot
问道飞鱼3 小时前
【Springboot知识】Springboot结合redis实现分布式锁
spring boot·redis·分布式
码明3 小时前
SpringBoot整合ssm——图书管理系统
java·spring boot·spring
荆州克莱4 小时前
微信小程序获取位置服务
spring boot·spring·spring cloud·css3·技术