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


Spring 注解可以被视为元数据,提供与程序相关的信息。程序的补充信息可以从注解中获取。注解不会影响程序,也不会改变编译后程序的动作。Spring 注解有两种类型,分别是 @Controller 和 @RestController。在本文中,我们将了解 @Controller 和 @RestController 之间的区别。

什么是 @Controller 注解?

Spring @Controller 注解用于告知某个特定类可以作为控制器。@Controller 注解和带注解的处理器方法基于 @RequestMapping 注解组合使用。@Controller 注解只能用于类,不能用于其他任何实体。此注解可以成功地与 Spring MVC 应用程序一起使用。

什么是 @RestController 注解?

RestController 用于通过 @RestController 注解开发 RESTful Web 服务。此注解可以在类级别使用,负责处理客户端发出的请求。它能够处理以下请求:

  • GET
  • POST
  • DELETE
  • PUT

@Controller 和 @RestController 的区别

可以在下表中找到 @Controller 和 @RestController 之间的区别:

@Controller @RestController
@Controller 可以作为 Spring MVC 控制器。 @RestController 用于 RESTful Web 服务。它通过将 @Controller 注解与 @ResponseBody 注解组合使用来工作。
@Controller 注解是 @Component 注解的特殊版本之一。 @RestController 是 @Controller 注解的专门版本。
@Controller 注解可以返回 Spring MVC 中的视图。 @RestController 注解不能返回任何视图。
@Controller 注解可用于类,表示该类是一个控制器。 @RestController 也用于类,表示该类是一个控制器。默认情况下,这些类中使用了 @RequestMapping 和 @ResponseBody。
必须将 @ResponseBody 方法用作处理器方法。 并非每个处理器方法都使用 @ResponseBody 方法。
@Controller 在 Spring 2.5 版本中推出。 @RestController 在 Spring 4.0 版本中推出。
@Controller 用于在 MVC 中定义控制器组件。 @RestController 可以使用 @Controller 和 @ResponseBody 自身注解。
@Controller 用于为 Web 应用程序返回视图。 @RestController 用于 RESTful Web 服务,数据以 JSON 或 XML 格式返回。
@Controller 支持视图解析。这有助于返回 ViewResolver 可以解析的视图。 不支持视图解析。
@Controller 能够返回任何类型的內容,但需要显式注解才能以 XML 或 JSON 格式返回数据。 它仅生成 JSON 和 XML 响应。
为了包含相关标头,必须显式包含 @ResponseBody。 它会自动包含标头,并指示其要提供的响应类型。

@Controller 和 @RestController 代码片段的区别

以下是代码片段的区别。

@Controller

@Controller
@ResponseBody
Public class MyController {
   Code snippet
}

@RestController

@RestController
Public class MyRestController {
   Code snippet
}

结论

@Controller 和 @RestController 是 Spring 的注解。@Controller 用于基于 Spring MVC 的应用程序。@RestController 以 JSON 或 XML 格式提供输出,用于 RESTful API。这两种注解都具有不同的功能,将它们彼此区分开来。

@Controller 与 @RestController 常见问题解答

1. 可以使用 @Controller 注解构建 REST API 吗?

可以!@Controller 可以用于创建 REST API。在这种情况下,每个方法都必须返回响应体,并且应该使用 @ResponseBody 进行注解。如果不使用 @ResponseBody,Spring MVC 将把方法的返回值解释为视图名称,但不会将任何数据写入响应体。

2. @Controller 和 @RestController 哪个更好?

@RestController 似乎更好,因为它以 JSON 或 XML 格式提供数据。使用 @RestController 开发 RESTful API 也变得更加简单。@RestController 还能够自动使用 @ResponseBody。

3. @RestController 可以替换 @Controller 吗?

如果要创建 RESTful 服务,则 @RestController 可以替换 @Controller。在其他情况下,这两种注解都具有不同的功能。@Controller 用于基于 Spring MVC 的应用程序。

4. 可以使用 @Component 替换 @Controller 吗?

如果要使用 Web 特定的功能,则 @Controller 是更好的选择,因为此注解是为 Web 层组件开发的。@Controller 能够轻松处理 HTTP 请求。

5. @Controller 和 @RestController 的主要区别是什么?

@RestController 自动使用 @ResponseBody,而 @Controller 注解则不是这样。

更新于:2024-07-22

308 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.