@Controller与@RestController
总结
@Controller :定义一个控制器类.
@RequestMapping :给出外界访问方法的路径,或者说触发路径 ,触发条件。 具体解析访问路径到某个方法上.
@ResponseBody :标记Controller类中的方法。把return的结果变成JSON对象返回。(如果没有这个注解,这个方法只能返回要跳转的路径即跳转的html/JSP页面。有这个注解,可以不跳转页面,只返回JSON数据)
@RestController = @Controller + @ResponseBody
一个具体的Model 或 ModelAndView前后端例子
前端视图(JSP):
假设你正在使用JavaServer Pages(JSP)作为前端视图。在这个示例中,我们将创建一个简单的欢迎页面,显示用户的名字。
<!-- greetingView.jsp -->
<!DOCTYPE html>
<html>
<head><title>Welcome</title>
</head>
<body><h1>Welcome, ${userName}!</h1>
</body>
</html>
后端控制器:
现在,让我们来创建一个Spring MVC控制器,以便在用户访问/greet
时显示欢迎页面。
@Controller
public class GreetingController {@RequestMapping("/greet")public String greetUser(@RequestParam("name") String userName, Model model) {model.addAttribute("userName", userName);return "greetingView"; // 返回视图名称}@RequestMapping("/greet")public ModelAndView greetUser(@RequestParam("name") String userName) {ModelAndView modelAndView = new ModelAndView();// 指定要使用的视图名称modelAndView.setViewName("greetingView");// 添加数据到模型modelAndView.addObject("userName", userName);return modelAndView;}
}
在这个控制器中,我们使用Model
对象将用户名传递给视图。当用户访问/greet
时,Spring MVC将自动找到名为"greetingView"的JSP视图,并将userName
数据传递给它。
此示例中,Model
用于传递数据给视图,以便视图能够显示用户的名字。然后,JSP视图使用${userName}
来显示传递的数据。
当用户访问/greet
时,他们将看到一个欢迎页面,显示他们的名字,这个名字是从控制器传递给视图的。
重定向
对于http的response,如果已经进行了提交(重定向,请求转发,过滤器中的放行),则不能对response再进行任何操作,比如修改,比如再次提交。
@Controller类的方法的返回值的详细介绍
@Controller类的方法通常是在Spring框架中使用的,用于处理HTTP请求并返回相应的HTTP响应。这些方法通常用于构建Web应用程序的后端逻辑,特别是在MVC(Model-View-Controller)架构中。下面是有关@Controller类方法返回值的详细介绍:
- 返回String类型:在Spring MVC中,方法可以返回一个String,通常是一个视图名称,这个String会映射到一个视图模板。Spring会根据配置的视图解析器找到对应的视图,并将模型数据渲染到该视图。这种方式用于呈现HTML页面。
@Controller
public class MyController {@GetMapping("/welcome")public String welcome() {return "welcomePage"; // 返回视图名称}
}
- 返回JSON数据:方法可以返回一个对象,Spring会自动将其转换为JSON格式并返回给客户端。通常在构建RESTful API时使用。
@Controller
public class MyController {@GetMapping("/getdata")@ResponseBodypublic MyData getData() {// 返回一个对象,Spring将其转为JSONreturn new MyData("John", 30);}
}
-
返回ResponseEntity:可以返回ResponseEntity对象,它允许更精确地控制HTTP响应的状态码、头部和主体。这对于处理自定义响应非常有用。
@Controller
public class MyController {@GetMapping("/getdata")public ResponseEntity<MyData> getData() {MyData data = new MyData("John", 30);return new ResponseEntity<>(data, HttpStatus.OK);}
}
-
重定向:方法可以返回"redirect:"前缀,用于执行重定向操作
@Controller
public class MyController {@GetMapping("/redirect")public String redirectToAnotherPage() {return "redirect:/newPage"; // 重定向到/newPage}
}
相关文章:

@Controller与@RestController
总结 Controller :定义一个控制器类. RequestMapping :给出外界访问方法的路径,或者说触发路径 ,触发条件。 具体解析访问路径到某个方法上. ResponseBody :标记Controller类中的方法。把return的结果变成JSON对象…...

Compose Desktop 使用中的几个问题(分平台加载资源、编写Gradle 任务下载平台资源、桌面特有组件、鼠标键盘事件)
前言 在我之前的文章 Compose For Desktop 实践:使用 Compose-jb 做一个时间水印助手 中,我们使用 Compose For Desktop 写了一个用于读取照片 EXIF 中的拍摄日期参数并以文字水印的方式添加到照片上的桌面程序。 但是事实上,这个程序的名字…...
【华为OD机试python】返回矩阵中非1的元素个数【2023 B卷|200分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 存在一个m*n的二维数组,其成员取值范围为0,1,2。 其中值为1的元素具备同化特性,每经过1S,将上下左右值为0的元素同化为1。 而值为2的元素,免疫同化。 将数组所有成员随机初始化为0或…...
容器安全 - 利用容器的特权配置实现对Kubernetes容器的攻击
《OpenShift / RHEL / DevSecOps 汇总目录》 文章目录 准备环境利用特权配置对Kubernetes容器攻击privileged hostpathprivileged hostpidprivilegedhostpathhostpidhostipchostnetwork 参考 通过将运行 Pod 的 privileged 设为 true,容器就以特权模式运行在宿主…...

深度剖析Android Binder IPC机制
Android系统的成功离不开其强大的IPC(Inter-Process Communication)机制,其中最引人注目的就是Binder。本文将深入探讨Binder的技术原理,解释其工作方式以及相关的关键概念。 什么是Binder Binder是Android系统中的IPC机制&…...

【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程 Shuffle是什么Shuffle的流程处理map任务的执行流程reduce任务的执行流程 Shuffle过程分析和优化map任务深入分析细化步骤分析1. 数据分片读取2. 分配计算Reduce服务Partitioner分区…...

CISA 彻底改变了恶意软件信息共享:网络安全的突破
在现代网络安全中,战术技术和程序(TTP)的共享对于防范网络事件至关重要。 因此,了解攻击向量和攻击类型之间的关联如今是让其他公司从其他公司遭受的 IT 事件中受益(吸取经验教训)的重要一步。 美国主要网…...

macos 12 支持机型 macOS Monterey 更新中新增的功能
macOS Monterey 能让你以全然一新的方式与他人沟通联络、共享内容和挥洒创意。尽享 FaceTime 通话新增的音频和视频增强功能,包括空间音频和人像模式。通过功能强大的效率类工具(例如专注模式、快速备忘录和 Safari 浏览器中的标签页组)完成更…...
代码随想录算法训练营第五十六天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和
代码随想录算法训练营第五十六天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和 1143.最长公共子序列1035.不相交的线53. 最大子序和 做了一个小时左右 1143.最长公共子序列 题目链接:1143.最长公共子序列 文章链接 状态:会做 代码 class Solu…...

01认识微服务
一、微服务架构演变 1.单体架构 将所有的功能集中在一个项目开发,打成一个包部署。优点架构简单,部署成本低。缺点耦合度高,不利于大型项目的开发和维护 2.分布式架构 根据业务功能对系统进行拆分,每个业务模块作为独立的项目…...

智能电表上的模块发热正常吗?
智能电表是一种可以远程抄表、计费、控制和管理的电力计量设备,它可以实现智能化、信息化和网络化的电力用电管理。智能电表的主要组成部分包括电能计量模块、通信模块、控制模块和显示模块等。其中,通信模块和控制模块是智能电表的核心部件,…...
网络代理技术的广泛应用和安全保障
随着网络世界的日益发展,网络代理技术作为保障隐私和增强安全的重要工具,其在网络安全、爬虫开发和HTTP协议中的多面应用备受关注。下面我们来深入了解Socks5代理、IP代理以及它们的作用,探讨它们如何促进网络安全和数据获取。 Socks5代理和…...

EasyCVR视频汇聚平台显示有视频流但无法播放是什么原因?该如何解决?
视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…...
WuThreat身份安全云-TVD每日漏洞情报-2023-10-13
漏洞名称:libcue <2.2.1 越权访问漏洞 漏洞级别:高危 漏洞编号:CVE-2023-43641,CNNVD-202310-579 相关涉及:系统-alpine_edge-libcue-*-Up to-(excluding)-2.2.1-r0- 漏洞状态:未定义 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-25092 漏洞名称:科大…...

中文编程工具开发语言开发的实际案例:触摸屏点餐软件应用场景实例
中文编程工具开发语言开发的实际案例:触摸屏点餐软件应用场景实例 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装,已内置数据库。软件在关闭的时候,可以设置会员数据备份到U盘&…...

138.【JUC并发编程- 03】
JUC并发编程- 03 (六)、共享模型之无锁1.问题提出(1).为什么不安全?(2).安全实现_使用锁(3).安全实现_使用CAS 2.CAS与volatile(1).CAS_原理介绍(2).CAS_Debug分析(3).volatile(4).为什么无锁效率高(5).CAS的特点 3.原子整形(1).原子整数类型_ 自增自减(2).原子整数类型_乘除模…...
React Hooks批量更新问题
React 版本17.0.2 import React, { useState } from react;const Demo () > {const [count, setCount] useState(0);const [count1, setCount1] useState(0);const [count2, setCount2] useState(0);console.log(Demo);const add async () > {await 10;setCount(c…...

竞赛 深度学习YOLO抽烟行为检测 - python opencv
文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习YOLO抽烟行为检测 该项目较为新颖,适合作为竞赛课…...

cAdvisor监控Docker容器做性能测试
cAdvisor监控Docker容器做性能测试 缘起 当前有个服务做技术选型,服务要求比较高的性能,要做性能测试。部署的环境是容器话部署,但申请新的容器流程较长,于是我打算在流程走完之前简单评估下性能,来确定技术选型是否…...

记一次EDU证书站
如果文章对你有帮助,欢迎关注、点赞、收藏一键三连支持以下哦! 想要一起交流学习的小伙伴可以加zkaq222(备注CSDN,不备注通不过哦)进入学习,共同学习进步 目录 目录 1.前言: 2.信息搜集 3.漏…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...