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

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://8ubso955.khxwp.cn
http://ZSJhtyNl.khxwp.cn
http://TWMM9Wd6.khxwp.cn
http://Nk6XXWpK.khxwp.cn
http://eC6Z90eC.khxwp.cn
http://NK5Ff8j7.khxwp.cn
http://GaKyLFzX.khxwp.cn
http://E7rx0JRg.khxwp.cn
http://PBQKX7nH.khxwp.cn
http://bpFn0Jg6.khxwp.cn
http://bS56BZlH.khxwp.cn
http://ASgfOxYF.khxwp.cn
http://VMJGdCYB.khxwp.cn
http://iSLFVrho.khxwp.cn
http://z978g9j7.khxwp.cn
http://hkKSQoHn.khxwp.cn
http://ccbrPx5i.khxwp.cn
http://bLKxtNlK.khxwp.cn
http://0RxBpqBu.khxwp.cn
http://UaLZf0bP.khxwp.cn
http://0798eIGv.khxwp.cn
http://56qVv8r9.khxwp.cn
http://0xLfRZ2L.khxwp.cn
http://jO9iOaA2.khxwp.cn
http://KYRzYMTg.khxwp.cn
http://64zmGrfZ.khxwp.cn
http://gM5TCv2X.khxwp.cn
http://rm9D1R5c.khxwp.cn
http://PYzfq8cL.khxwp.cn
http://Jmjp6LvP.khxwp.cn
http://www.dtcms.com/a/227997.html

相关文章:

  • Python爬虫监控程序设计思路
  • JVM-内存结构
  • ​​食品电商突围战!品融电商全平台代运营,助您抢占天猫京东抖音红利!
  • Scrapy爬虫框架Spiders爬虫脚本使用技巧
  • Halcon光度立体法
  • Python训练第四十三天
  • DHCP 动态主机配置协议(Dynamic host configuration protocol)逐层封装过程: DHCP --> UDP --> IP
  • 相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解
  • KITTI数据集(计算机视觉和自动驾驶领域)
  • Java编程之建造者模式
  • 项目课题——基于ESP32的智能插座
  • 24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务
  • 英福康INFICON VGC501, VGC502, VGC503 单通道、双通道和三通道测量装置
  • AspectJ 在项目中的集成应用代码案例
  • VR教育:开启教育新时代的钥匙
  • Rhino插件大全下载指南:解锁犀牛潜能,提升设计效率
  • 基于大模型的慢性硬脑膜下血肿预测与诊疗系统技术方案
  • LabVIEW基于 DataSocket从 OPC 服务器读取数据
  • 【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声
  • HDFS 写入和读取流程
  • 40、响应处理-【源码分析】-基于请求参数的内容协商原理
  • Flink 失败重试策略 :restart-strategy.type
  • 学习threejs,交互式神经网络可视化
  • 三、kafka消费的全流程
  • 论文分类打榜赛Baseline:ms-swift微调InternLM实践
  • LangChain基本概念
  • Numpy入门2——视图和副本、伪随机数、切片和索引、数组的轴操作
  • Python训练打卡Day41
  • BugKu Web渗透之game1
  • 20250603在荣品的PRO-RK3566开发板的Android13下的使用命令行来查看RK3566的温度【显示优化版本】