@RestController 和 @Controller 注解的联系及要点

1. @RestController

• @RestController 是 Spring 4.0 引入的一个注解,它相当于 @Controller + @ResponseBody组合注解

主要作用:主要用于构建 RESTful Web 服务。标注 @RestController 的类里的所有方法,返回的都是 JSON 或 XML 等格式的数据,而不是视图页面。

自动返回数据:与 @Controller 不同,@RestController 下的每个方法默认都会将返回的对象序列化为 JSON 或 XML,并直接写入 HTTP 响应体。你无需在每个方法上再加 @ResponseBody。

返回值处理它默认将控制器中的所有方法的返回值转换为 JSON 或其他格式的数据输出到响应体中,而不会尝试解析为视图名称。

因此,当你在类上使用了 @RestController 时,你返回的数据如“login”,Spring 会认为这是要返回给前端的数据,而不是视图名称。它不会去解析和渲染页面,前端只收到一个字符串 "login"。

2. @Controller

• @Controller 是用于传统的 Spring MVC 模式,它通常用于处理页面导航和视图渲染。

主要作用:@Controller 用于标识一个类是 Spring MVC 的控制器。控制器类中的方法通常返回的是视图名称,Spring 会通过视图解析器来找到对应的视图模板,并将该视图渲染成 HTML 页面返回给客户端。

示例:如下代码,如果使用@Controller,则会默认为templates/login.html

@RequestMapping("/toLogin")public String toLogin() {// 返回的是视图名称 "login",由视图解析器去查找对应的模板文件(如 login.html)return "login";}

返回视图 vs. 数据@Controller 返回的通常是视图名称(比如 Thymeleaf 模板、JSP 页面)。但是如果你希望返回 JSON 或其他格式的数据,而不是页面,则需要在方法上加@ResponseBody 注解,那么Spring 便不会将数据解析为文件。

视图解析器:如果你返回的内容是一个字符串,Spring MVC 会把这个字符串当作视图的名称,交给视图解析器去找到对应的模板来渲染页面。

返回值处理:当你返回一个字符串时,Spring MVC 会将这个字符串视为视图的名称,使用视图解析器(如 Thymeleaf)去找到对应的视图模板,然后渲染页面。

3.区别

特性

@Controller

@RestController

返回类型

默认返回视图名称(页面模板)。

返回的是 JSON 或 XML 格式的数据。

数据返回

需要配合 @ResponseBody 才能返回 JSON 数据。

自动返回 JSON 数据,无需 @ResponseBody。

使用场景

适合返回视图页面的场景(如网页、HTML)。

适合构建 RESTful API,返回数据给客户端。

数据格式

视图名称,页面渲染。

返回 JSON、XML 或其他类型的数据。

常见用法

与视图模板引擎(如 Thymeleaf、JSP)配合使用。

4. 适用场景?

如果你要构建的是一个 Web 应用,且需要返回 HTML 页面(如前端需要加载不同的页面),应使用 @Controller (常用于前后端不分离场景)

如果你要构建的是一个 RESTful API,客户端只需要接收 JSON 数据而不是页面内容,应该使用 @RestController(常用于前后端分离场景)

5.总结

@RestController:适合构建 REST API,返回 JSON、XML 等格式的数据,不用于返回视图页面。

@Controller:适合处理页面请求,返回视图名称,由视图解析器渲染页面,若不想返回数据解析为视图名称,则需要在对应方法上加上@ResponseBody 注解即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445489.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7. 整数反转【数学】

文章目录 7. 整数反转解题思路Go代码 7. 整数反转 7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [−231,231−1] &#xff0…

数学建模算法与应用 第12章 现代优化算法

目录 12.1 粒子群优化算法 Matlab代码示例:粒子群优化算法求解函数最小值 12.2 遗传算法 Matlab代码示例:遗传算法求解函数最小值 12.3 蚁群算法 Matlab代码示例:蚁群算法求解旅行商问题 12.4 Matlab 遗传算法工具 使用遗传算法工具箱…

U盘误删文件?一招教你轻松找回!

大家好!今天咱们来聊聊一个让人头疼却又常见的问题——U盘数据丢失。是不是有时候不小心删了个文件,或者格式化了U盘,结果发现重要资料不见了,心里那个急啊!别急,别急,今天我就给大家推荐几款免…

Scalable TCP 如何优化长肥管道

来看一个极简的拥塞控制实现 net/ipv4/tcp_scalable.c,去掉注释不到 50 行代码。它的介绍在 Scalable TCP-improving performance in highspeed networks。由于太简单,估计没什么人会在意。 本文说一下它背后的道理。 无论 bic/cubic,westw…

leetcode:反转字符串II

题目链接 string reverse(string s1) {string s2;string::reverse_iterator rit s1.rbegin();while (rit ! s1.rend()){s2 *rit;rit;}return s2; } class Solution { public:string reverseStr(string s, int k) {string s1;int i 0;//标记字符串下标int j 0;int length …

react+ts+vite 别名一直爆红问题

已经配置如下代码安装了types/node import path from "path"; // https://vitejs.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {"/api": {target: "http://localhost:3000",changeOrigin: true,rewrite: (pa…

数字电路尚硅谷学习笔记

学习视频:01_数字电路_从零搭建计算机引导_哔哩哔哩_bilibili 第1章数字电路基础 1.引言 数字电路是现代科技和工程领域中不可或缺的基础。从计算机系统到通信设备,从家庭电子产品到工业自动化,数字电路无处不在,影响着我们的生…

手写mybatis之解析和使用ResultMap映射参数配置

前言 学习源码是在学习什么呢? 就是为了通过这些源码级复杂模型中,学习系统框架的架构思维、设计原则和设计模式。在这些源码学习手写的过程中,感受、吸收并也是锻炼一种思维习惯,并尝试把这些思路技术迁移到平常的复杂业务设计开…

1.MySQL存储过程基础(1/10)

引言 数据库管理系统(Database Management System, DBMS)是现代信息技术中不可或缺的一部分。它提供了一种系统化的方法来创建、检索、更新和管理数据。DBMS的重要性体现在以下几个方面: 数据组织:DBMS 允许数据以结构化的方式存…

“云计算+高职”:VR虚拟仿真实训室的发展前景

随着科技的飞速进步,云计算与虚拟现实(VR)技术的结合正在深刻改变着教育领域,尤其是在高等职业教育中,这一融合为实训教学带来了革命性的变革。VR虚拟仿真实训室作为这一变革的前沿阵地,正展现出广阔的发展…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”(或标准内置对象)不应与 global 对象混淆。这里的“全局…

出海快报 | “三消+短剧”手游横空出世,黄油相机“出圈”日本市场,从Q1看日本手游市场趋势和机会

编者按:TopOn出海快报栏目为互联网出海从业者梳理出海热点,供大家了解行业最新发展态势。 1.“三消短剧”横空出世,融合创新手游表现亮眼 随着竞争的加剧,新产品想要突出重围,只能在游戏中加入额外的元素。第一次打开…

Spring Boot项目的创建与使用

1.SpringBoot初识 SpringBoot是什么 介绍 ​ 为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是 Spring Boot。 Spring Boot是由Pivotal团队提供的全新,其设计目的是用来新应用的初始…

Java JWT:原理、机制及案例示范

一、什么是JWT? 1.1 JWT的基本概念 JWT(JSON Web Token)是一种用于在各方之间传递JSON格式信息的紧凑、URL安全的令牌(Token)。JWT的主要作用是验证用户身份或权限。它由三部分组成: Header(…

Ubuntu 上安装 MySQL 并且实现远程登录

目录 1. 安装MySQL 2. 安全配置MySQL 3. 配置MySQL远程登录 3.1. 允许远程连接 3.2. 重启MySQL服务 3.3. 为用户分配远程访问权限 进入MySQL后,执行以下命令: 3.4. 创建新用户 3.5. 授予权限 3.6. 刷新权限 3.7. 退出 MySQL 控制台 4. 配置防火…

大数据新视界 --大数据大厂之大数据驱动下的物流供应链优化:实时追踪与智能调配

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

文章目录 介绍加载R包数据函数画图系统信息介绍 蝴蝶图(Butterfly Chart),也被称为龙卷风图(Tornado Chart)或双轴图(Dual-Axis Chart),是一种用于展示两组对比数据的图表。这种图表通过在中心轴两侧分别展示两组数据的条形图,形似蝴蝶的翅膀,因此得名。蝴蝶图的特点…

汉语言文学做大数据七年实际工作经验分享普通人快来围观

(一)没有人带你 社会上,都很现实。就是进了公司,有师傅,师傅也没空带你,最多就是有空的时候帮你解决问题。 无论是做啥工作,都要靠自己努力。努力不会成为笑话,不努力就是笑话。就…

STM32 QSPI接口驱动GD/W25Qxx配置简要

STM32 QSPI接口GD/W25Qxx配置简要 📝本篇会具体涉及介绍Winbond(华邦)和GD(兆易创新) NOR flash相关型号指令差异。由于网络上可以搜索到很多相关QSPI相关知识内容,不对QSPI通讯协议做深度解析。 🔖首先确保所使用的ST…

VScode 自定义代码配色方案

vscode是一款高度自定义配置的编辑器, 我们来看看如何使用它自定义配色吧 首先自定义代码配色是什么呢? 看看我的代码界面 简而言之, 就是给你的代码的不同语义(类名, 函数名, 关键字, 变量)等设置不同的颜色, 使得代码的可读性变强. 其实很多主题已经给出了定制好的配色方案…