当前位置: 首页 > 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://www.lqws.cn/news/98173.html

相关文章:

  • Spring AI Advisor机制
  • 用 Vue 做一个轻量离线的“待办清单 + 情绪打卡”小工具
  • LangChain实战:文档加载、分割与向量存储详解
  • Linux或者Windows下PHP版本查看方法总结
  • 浅谈机械硬盘存储技术与磁盘格式化
  • ORA-12899: value too large for column LONG_TYPE (actual: 30, maximum: 20)
  • 谷歌地图高清卫星地图2026中文版下载|谷歌地图3D卫星高清版 V7.3.6.9796 最新免费版下载 - 前端工具导航
  • UniRig:如何在矩池云一站式解决 3D 模型绑定难题
  • Flink03-学习-套接字分词流自动写入工具
  • 剑指offer14_二进制中1的个数
  • 用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战
  • 链表题解——反转链表【LeetCode】
  • (三)动手学线性神经网络:从数学原理到代码实现
  • 机器学习——主成分分析PCA
  • 数据库密码加密
  • lanqiaoOJ 1508:N皇后问题 ← dfs
  • SpringBoot项目打包成war包
  • Kdump 介绍与使用方式
  • Samtec技术支持 | 新型评估和开发套件
  • Agno:使用简单代码构建AI智能体
  • 百万级临床试验数据库TrialPanorama发布!AI助力新药研发与临床评价迎来新基石
  • MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动
  • 编译 Linux openssl
  • Asp.net core 使用EntityFrame Work
  • 一、基础环境配置
  • Walle-Web:打造轻量级高效的DevOps自动化部署平台
  • 【数据库】《DBA实战手记》- 读书笔记
  • centos中的ulimit命令
  • Python数据分析及可视化中常用的6个库及函数(一)
  • 【JAVA版】意象CRM客户关系管理系统+uniapp全开源