Spring MVC中@Controller和@RestController的区别

@Controller@RestController 是 Spring MVC 中用于处理 HTTP 请求的注解,它们有以下区别:

  1. 返回值处理方式:

    • @Controller 用于定义一个传统的 Spring MVC 控制器,它的方法通常返回视图名称或 ModelAndView 对象,由视图解析器解析并渲染成 HTML 页面。

      java 复制代码
      @Controller
      public class MyController {
      
          @GetMapping("/hello")
          public String hello() {
              return "helloPage"; // 返回视图名称
          }
      }
    • @RestController 组合了 @Controller@ResponseBody,用于定义 RESTful 风格的控制器。其方法的返回值会直接写入 HTTP 响应体,而不是通过视图解析器解析为视图。

      java 复制代码
      @RestController
      public class MyRestController {
      
          @GetMapping("/api/hello")
          public String hello() {
              return "Hello, REST API!"; // 直接写入响应体
          }
      }
  2. 默认响应类型:

    • @Controller 默认返回视图,通常使用 ViewResolver 将逻辑视图名映射为实际视图。
    • @RestController 默认返回 JSON 或 XML 格式的数据,而不是视图。
  3. 使用场景:

    • 使用 @Controller 时,通常用于构建传统的 Web 应用,其中页面渲染由视图模板(如 JSP、Thymeleaf)处理。
    • 使用 @RestController 时,适用于构建 RESTful API,其中数据以 JSON 或 XML 格式返回给客户端。

实际例子:

java 复制代码
@Controller
public class WebPageController {

    @GetMapping("/helloPage")
    public String helloPage() {
        return "helloPage"; // 返回视图名称,通常由视图解析器解析为实际视图
    }
}
java 复制代码
@RestController
public class ApiController {

    @GetMapping("/api/hello")
    public String helloApi() {
        return "Hello, REST API!"; // 直接返回字符串,将以 JSON 或 XML 格式写入响应体
    }
}

在构建 Web 页面的场景中,使用 @Controller 处理用户请求,返回视图名称,然后由视图解析器解析为实际视图。而在构建 RESTful API 的场景中,使用 @RestController 直接返回数据,通常以 JSON 或 XML 格式。

相关推荐
云道轩2 分钟前
deepseek为采用JAVA重构模型运营平台vLLM和SGLang指定的计划
java·vllm·deepseek·sglang
Gy-1-__12 分钟前
【springcloud】快速搭建一套分布式服务springcloudalibaba(三)
后端·spring·spring cloud
martian66522 分钟前
NVM 多版本Node.js 管理全指南(Windows系统)
java·开发语言·windows·node.js
橘猫云计算机设计23 分钟前
基于springboot科研论文检索系统的设计(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·毕业设计
Yan-英杰24 分钟前
【百日精通JAVA | SQL篇 | 第四篇】约束
java·服务器·开发语言·数据库·人工智能·sql·mysql
suimeng61 小时前
Java的Selenium的特殊元素操作与定位之时间日期控件
java·自动化测试·selenium
Ai 编码助手1 小时前
idea插件:AICommit,智能生成Git提交信息
java·git·intellij-idea
江沉晚呤时1 小时前
C#中观察者模式(Observer Pattern)深入解析
java·服务器·数据库
信徒_1 小时前
Spring 中的 bean 生命周期
java·python·spring
肖恩想要年薪百万1 小时前
如何在idea中快速搭建一个Spring Boot项目?
java·数据库·spring boot·后端·学习·mysql·intellij-idea