Spring 中 @Controller 与 @RestController 注解的区别

在 Spring 框架中,我们主要使用两个注解来处理 Web 请求:INLINECODE191ca4e5 和 INLINECODE2db3783f。虽然乍看之下它们有些相似,但它们的设计初衷并不相同:

  • @Controller 通常用于基于 MVC 的 Web 应用(即返回 HTML 视图)。
  • @RestController 则用于构建 RESTful API(即返回 JSON/XML 响应)。

@Controller 注解

  • @Controller 是 Spring 中的一个注解,用于在 MVC(模型-视图-控制器)应用程序中定义 Web 控制器。
  • 它通常与视图解析器(如 Thymeleaf、JSP 或 FreeMarker)协同工作,用于返回 HTML 页面。
  • 如果你希望返回 JSON/XML 数据,必须在每个方法上添加 @ResponseBody 注解。

示例:在 Spring MVC 应用中使用 @Controller

            Java
@Controller
public class HomeController {
    
    @GetMapping("/home")
    public String homePage(Model model) {
        model.addAttribute("message", "Welcome to Spring MVC!");
        
        // 返回一个视图(例如 home.html 或 home.jsp)
        return "home"; 
    }
}

解释:

  • @Controller 注解将该类标记为一个 Spring MVC 控制器。
  • INLINECODE3f1b6db8 方法映射了 INLINECODE885f409e 路径,并返回一个名为 home 的视图。
  • [@RestController](https://www.geeksforgeeks.org/advance-java/spring-rest-controller/) 注解专门用于创建 RESTful Web 服务。
  • 该注解用于类级别,允许该类处理客户端发出的请求。
  • RestController 能够处理所有的 REST API,包括 GET、POST、Delete 和 PUT 请求。
  • 它在功能上等价于 -> INLINECODE19ad56d8 + INLINECODEc95be151 的组合。

示例:在 REST API 中使用 @RestController

            Java
@RestController
public class ProductController {
    
    @GetMapping("/product")
    public Product getProduct() {
        return new Product(1, "Laptop", 80000);
    }
}

解释:

  • INLINECODE93aaa341 注解结合了 INLINECODE8f515af3 和 @ResponseBody 的功能。
  • getProduct() 方法返回一个 Product 对象,该对象会自动转换为 JSON 格式。

@Controller vs @RestController

下表清晰地展示了 Spring 中 INLINECODEb491b8b2 和 INLINECODE5f7213d0 注解的区别。

特性

@Controller

@RestController —

— 定义

该注解用于将类标记为 Spring MVC 控制器。

这是一个专门用于 RESTful Web 服务的控制器。 继承关系

继承自 INLINECODEe1088551 注解。

继承自 INLINECODE82bd2bb7 注解。 视图支持

在 Spring Web MVC 中返回视图。

不能返回视图。 响应处理

需要配合 INLINECODE646004a4 才能发送 JSON 或 XML 格式的响应。

默认即包含了 INLINECODE52694d2a 的语义,无需显式添加注解。 请求处理

用于返回视图(JSP、Thymeleaf)的传统 MVC 应用。

用于直接向客户端发送 JSON 或 XML 响应的 REST API。 Spring 版本

引入于 Spring 2.5。

引入于 Spring 4.0。

何时使用哪一个

何时使用 @Controller:

  • 当你正在构建返回 HTML 页面的 Web 应用程序时。
  • 当你希望与前端模板引擎(如 Thymeleaf 或 JSP)进行集成时。

何时使用 @RestController:

  • 当你正在为移动应用、单页应用(SPA)或微服务构建 REST API 时。
  • 当你需要以 JSON/XML 格式交换数据时。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49408.html
点赞
0.00 平均评分 (0% 分数) - 0