当前位置: 首页 > backend >正文

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

  在Spring框架中,@Controller和@RestController都是用于处理HTTP请求的注解,但它们在使用方式和返回类型上有显著区别。


1.@Controller

  • 用途:传统的Spring MVC控制器,通常用于返回视图(如JSP、Thymeleaf等),但也可以返回数据(需配合 @ResponseBody)。
  • 返回类型
    • 默认返回视图名称(由视图解析器渲染为HTML页面)。
    • 若需返回JSON/XML等数据,需在方法上额外添加@ResponseBody注解。
  • 适用场景:需要服务端渲染页面(SSR)或混合返回视图和数据的场景。

示例代码:

@Controller
@RequestMapping("/web")
public class WebController {// 返回视图名称(渲染为HTML)@GetMapping("/home")public String home() {return "home-page"; // 对应src/main/resources/templates/home-page.html}// 返回JSON数据(需@ResponseBody)@ResponseBody@GetMapping("/data")public User getUser() {return new User("Alice", 25);}
}

2.@RestController

  • 用途:专为RESTful API设计,所有方法默认返回数据(JSON/XML),而非视图。
  • 本质:是 @Controller@ResponseBody 的组合注解(即所有方法自动添加@ResponseBody)。
  • 适用场景:纯API服务(前后端分离架构),无需视图渲染。

示例代码:

@RestController
@RequestMapping("/api")
public class ApiController {// 自动返回JSON(无需@ResponseBody)@GetMapping("/user")public User getUser() {return new User("Bob", 30);}// 直接返回字符串@GetMapping("/hello")public String sayHello() {return "Hello, World!";}
}

3.关键区别总结

特性@Controller@RestController
​默认返回类型视图名称数据(自动@ResponseBody)
​ 组合注解@Controller + @ResponseBody
适用场景服务端渲染(SSR)或混合应用纯REST API(前后端分离)
​ 是否需要@ResponseBody需要(返回数据时)不需要(已内置)

如何选择?

  • 如果开发传统Web应用​(含页面渲染),使用@Controller。
  • 如果开发纯API服务​(如React/Vue前端调用),使用@RestController。

通过理解两者的差异,可以更高效地设计Spring应用的架构。

http://www.xdnf.cn/news/10818.html

相关文章:

  • leetcode hot100刷题日记——37.三数之和
  • 光伏功率预测新突破:TCN-ECANet-GRU混合模型详解与复现
  • 网络安全运维实训室建设方案
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--简单的工作进度管理
  • 攻防世界RE-1000Click
  • 深入理解 JSX:React 的核心语法
  • Java中并发修改异常如何处理
  • (四)动手实现多层感知机:深度学习中的非线性建模实战
  • 操作系统:生态思政
  • 系统设计面试利器:The System Design Primer开源项目介绍
  • 嵌入式系统:从技术原理到未来趋势(驱动程序篇)
  • SQL Indexes(索引)
  • 基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案
  • Agent智能体应用教程系列(四):仅需几步,拥有自己专属的多agent智能体!
  • win11中使用grep
  • 小牛电动2025新品矩阵,引领技术普惠新风潮
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • Windows Server部署Vue3+Spring Boot项目
  • Linux运维笔记:1010实验室电脑资源规范使用指南
  • Day38 训练
  • 服务端定时器的学习(一)
  • C#面试问题61-80
  • AgenticSeek:您的本地AI智能大脑,免费且私密
  • 线程相关面试题
  • 【leetcode】20. 有效的括号
  • ​链表题解——回文链表【LeetCode】
  • Go 为何天生适合云原生?
  • 前端下载文件,文件打不开的问题记录
  • 【数据分析】第四章 pandas简介(2)
  • AI与区块链:数据确权与模型共享的未来