SpringMVC的控制器方法的一些要点

一、控制器类的注解

1、SpringMVC的控制器类,一般用注解@Controller来注释,代表该类是控制器类。

2、如果整个控制器都采用响应体数据返回,那么可以用组合注解 @RestController。


二、控制方法的注解

(一)映射请求路径
1、@RequestMapping注解
加在方法前面,或者类的前面,默认是匹配GET请求方法。

默认路径是根路径"/",允许在注解中设置路径。

2、@GetMapping
加在方法前面,专门映射GET方法请求。

3、@PostMapping
加在方法前面,专门映射Post方法请求。

4、@DeleteMapping
加在方法前面,专门映射Delete方法请求。

5、@PutMapping
专门映射Put方法请求。

注意:它们都可以设置映射路径。
如果类的@RequestMapping注解也有路径,那么最终访问要以加上类设置的路径。


(二)映射请求数据,赋值给方法的参数
1、@RequestParam
该注解通过设置name属性,和表单的name值对应,把URL路径后请求参数或者表单提交的域赋值给注释的方法参数。

2、@RequestPart
该注解获取表单中file类型的文件域,赋值给Part类型的对象,用来读取用户上传的文件。

3、@RequestBody
该注解获取请求体的多个属性值,赋值给一个普通对象。

普通对象的属性名和请求体的属性名是相同的。

4、获取URL地址的路径参数
在用@RequestMapping和其他映射注解中定义占位符: “/路径{占位符}”

把@PathVariable(“占位符”)加到该方法的对应参数上,一般是String类型,如果是整型,使用int类型。

注意:占位符要保持相同才能获取用户访问的路径参数。

例如定义 “/user/{id}”,那么用户访问"/user/88",后台就能用"id"得到请求值88。


5、@ModelAttribute
加在控制器的某个方法上,用来统一设置某些属性,或者某些操作。

每个控制器方法执行前都要执行该注解修饰的方法。


(三)响应JSON或者XML格式的数据
@ResponseBody
该注解把控制器方法的返回值转成JSON或者XML类型的数据,放在响应体中返回给用户。

实际可以在@RequestMapping的contentType属性设置接受的请求类型。


三、控制器方法接受的传参类别

(一)常用参数:
1、HttpServletRequest
这是Servlet的封装请求类,可以在控制器方法里添加。

2、HttpServletResponse
此类型是Servlet的封装响应类,可以用户自定义响应数据。

3、HttpSession
此类型是会话类,代表服务器和客户端的一次会话。
实际可以设置会话属性,用来维持登录状态。

4、Model 数据模型
这是SpringMVC提供的类,用来设置返回的原生数据。

5、ModelMap 数据集合。
这是SpringMVC提供的集合里,能设置多个返回的属性。

6、ModelAndView 封装数据和模型名。
用来设置视图名,设置显示的模型数据。

有addObject()方法设置模型。
有addView()方法设置视图名字。

7、BindingResult 绑定结果。
该类型的对象是用来获取URL中请求的属性。


(二)获取请求参数
1、获取URL请求参数

使用基本类型形参接收。
方法中每个变量接收一个URL参数。

适合接受2个以内的请求路径参数。

注意:控制器形参的名字和前端传参的名字相同,数据类型也要对应,防止转换错误。

如果名字不同,用@RequestParam的name属性来修改到相同。


2、使用普通对象类型。
2.1、表单接收:
用一个自定义对象接收和对象属性相同的表单属性值。

对象中的属性名和表单中的name值要相同,否则绑定值为null。

2.2、JSON类型:
如果对方传值的是请求体,并且是XML或者JSON格式的,就需要使用对象来映射和绑定,并添加注解@RequestBody。

2.3、如果传值是表单的checkbox类型,表单域的name属性值相同,控制器需要使用数组来接收,例如 Integer[] 或者String[]类型的参数接收。

2.4、如果是批量对象传值,使用普通对象绑定,内部用集合List<类>来存放多个对象,存放批量修改的数据。

表单的请求域的name值的格式:
集合名属性名[从0开始的索引数字].属性名

注意:同一个对象的索引是相同的。

控制器用一个普通对象作形参,包装一个集合属性来接收。


(三)获得表单文件域
1、单个文件接收
用SpringMVC提供的MutipartFile类型的对象来接收。

需要用@RequestParam来设置名字和表单文件域的name属性对应。

适合单个文件的接收。

有transferTo()方法来存放文件,还有获取文件名,获取文件大小,获取输入流等方法。


2、多个同名文件接收
用MutipartFile类型的对象数组来接收。
只需要遍历来操作每个文件。


四、返回值

(一)可以是void空类型。
代表没有返回值,可能在其他方面来返回。

(二)、返回值可以是ModelAndView类型。
同时指定模型和视图。

将返回指定的视图,填充指定的模型数据。

(三)返回值是String类型。
如果没有添加@ResponseBody注解,那么返回的字符串代表视图名,就会返回视图。

如果转发,就在视图名前面加"forward:",如果重定向,就在视图名前面加"redirect:"。

例如:返回"main",代表返回名字为main的视图。

(四)对象类型。
如果添加了@ResponseBody注解,就会转成默认的JSON数据返回到响应体中。

支持转化的类型:对象类型,包括基本类型的包装类型、集合类型、POJO对象类型。

(五)ResponseEntity类型。
这是SpringMVC提供的返回封装类。

如果没有加@ResponseBody注解,可以封装响应结果,使用ResponseEntity类的对象返回,可以指定响应头的对象,响应体的内容,响应码。

如果是下载文件可以直接调用HttpServletResponse对象作出响应,返回值设为void类型。


五、其他知识点

(一)HttpServletRequest的getParameter()方法可以获得请求参数,也可以获得表单的POST方法的请求体的表单域属性。

(二)如果是单个文件域,可以使用HttpServletRequest的getPart()方法来获取输入流。

(三)如果是多文件域,可以用HttpServletRequest的getParts() 来获取文件对象Part集合。

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

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

相关文章

Algorithm Data Management Cube(ADM-Cube)本科生招募

Algorithm & Data Management Cube&#xff08;算法与数据管理研究小组&#xff0c;A&DM-Cube, http://www.adm-cube.online/ &#xff09;是隶属于天津大学管理与经济学部信息管理与管理科学系/复杂管理系统实验室的研究团队。为了进一步加强团队建设&#xff0c;推动…

ezButton-按钮库

ezButton-按钮库 使用按钮时&#xff0c;初学者通常会遇到以下麻烦&#xff1a; Floating input issue 浮动输入问题Chattering issue 抖动问题Detecting the pressed and released events 检测按下和释放的事件Managing timestamp when debouncing for multiple buttons 在多…

cocosCreator获取手机剪切板内容

最近游戏中需要加上复制粘贴的功能,这个时候就涉及到安卓原生层的东西。步骤如下: 公开文章地址,见个人博客 复制功能 ts代码 调用代码,在需要复制的地方调用即可。 public static copyToClipBoard(str) {if (sys.platform == sys.Platform.ANDROID) {PlatformMgr.callN…

工业设计初学者手册——第四部分:制造工艺

工业设计初学者手册 文章目录 工业设计初学者手册第四部分&#xff1a;制造工艺7. 常见制造工艺介绍7.1 传统制造工艺7.2 现代制造工艺 8. 材料选择与应用8.1 材料的基本分类与特性8.2 材料选择的原则8.3 环保材料的应用 总结 第四部分&#xff1a;制造工艺 7. 常见制造工艺介…

Laravel 中 使用模型作为标志

我最近一直在尝试的一件事是使用模型作为标志&#xff0c;并取得了积极的成果。当你需要以某种方式标记你的一个模型时&#xff0c;你可以在表中添加一个布尔值来指示某种状态。例如&#xff0c;假设你向应用程序添加了一个停用用户的功能。你可以使用如下迁移来更改用户表&…

社团管理系统

用Spring Boot、Vue.js和MyBatis实现社团管理系统 温馨提示&#xff1a;项目源代码获取方式见文末 摘要 本文探讨了如何使用Spring Boot作为后端框架&#xff0c;Vue.js作为前端框架&#xff0c;以及MyBatis作为数据库持久层框架&#xff0c;构建一个社团管理系统。该系统旨…

在Ubuntu上配置和设置防火墙UFW

在本文我们学习如何在Ubuntu上配置和设置UFW&#xff08;防火墙&#xff09;&#xff0c;UFW代表“不复杂的防火墙”&#xff0c;它充当IPTABLES的接口&#xff0c;从而简化了防火墙的配置过程&#xff0c;对于防火墙来说&#xff0c;这是非常困难的。初学者学习和配置防火墙规…

从 PERL 脚本获取输出并将其加载到 MySQL 数据库的解决方案

1、问题背景 有一段 Python 脚本可以调用 Perl 脚本来解析文件&#xff0c;解析后&#xff0c;Perl 脚本会生成一个输出&#xff0c;这个输出将被加载到 Python 脚本中的 MySQL 数据库中。Python 脚本如下&#xff1a; pipe subprocess.Popen(["perl", "./pa…

JSR303校验

校验的需求 前端请求后端接口传输参数&#xff0c;需要校验参数。 在controller中需要校验参数的合法性&#xff0c;包括&#xff1a;必填项校验、数据格式校验等在service中需要校验业务规则&#xff0c;比如&#xff1a;课程已经审核过了&#xff0c;所以提交失败。 servi…

【UML用户指南】-17-对基本行为建模-交互

目录 1、消息的可视化表示 2、对象与角色 3、链和连接件 4、消息 5、序列 6、创建、修改和撤销 7、表示法 8、常用建模技术 8.1、对控制流建模 8.1.1、基于时间的控制流 8.1.2、基于结构的控制流 在任何有意义的系统中&#xff0c;对象都不是孤立存在的&#xff0c;…

Gitlab SSH无法连接但是HTTP可以连接

项目场景&#xff1a; Gitlab在docker中布置好之后测试&#xff0c;发现SSH无法连接但是HTTP可以连接 提示&#xff1a;这是一个无效的源路径 问题描述 http可以识别为git项目&#xff0c;而ssh无法识别成git项目。 原因分析&#xff1a; 三种猜想 端口号被占用 尝试查看…

韩兴国/姜勇团队在《Trends in Plant Science》发表植物根系氮素再分配的观点文章!

氮素是陆地生态系统中的关键限制性营养元素&#xff0c;通过生物固氮和土壤氮供应通常远低高等植物的氮需求。当土壤氮素供应无法充分满足植物茎叶生长需求时&#xff0c;植物会通过自身营养器官&#xff08;如根或根茎&#xff09;再分配来实现氮的内部循环和再利用。尽管植物…

SaaS产品运营|一文讲清楚为什么ToB产品更适合采用PLG模式?

在数字化时代&#xff0c;ToB&#xff08;面向企业&#xff09;产品市场的竞争愈发激烈。为了在市场中脱颖而出&#xff0c;许多企业开始转向PLG&#xff08;产品驱动增长&#xff09;模式。这种模式以产品为核心&#xff0c;通过不断优化产品体验来驱动用户增长和业务发展。本…

RAG未来的出路

总有人喊RAG已死,至少看目前不现实。 持这个观点的人,大多是Long context派,老实说,这派人绝大多数不甚理解长上下文的技术实现点,就觉得反正context越长,越牛B,有点饭圈化 ,当然我并不否认长上下文对提升理解力的一些帮助,就是没大家想的那么牛B而已(说个数据,达到…

2024年ERP软件公司排名前十!

在当今的商业环境中&#xff0c;ERP&#xff08;企业资源规划&#xff09;系统已成为企业日常运营不可或缺的一部分。然而&#xff0c;如何在这众多的ERP系统软件中筛选出最适合自己的一款&#xff0c;成为许多企业共同面临的挑战。今天&#xff0c;我将带大家盘点erp软件公司的…

李沐:用随机梯度下降来优化人生!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今天我们来聊聊达叔 6 大核心算法之 —— 优化 算法。吴恩达&#xff1a;机器学习的六个核心算法&#xff01; 梯度下降优化算法是机器…

【初体验 threejs】【学习】【笔记】hello,正方体 3!

前言 为了满足工作需求&#xff0c;我已着手学习 Three.js&#xff0c;并决定详细记录这一学习过程。在此旅程中&#xff0c;如果出现理解偏差或有其他更佳的学习方法&#xff0c;请大家不吝赐教&#xff0c;在评论区给予指正或分享您的宝贵建议&#xff0c;我将不胜感激。 项…

【Python支持多种数据类型及案列】

Python 数据类型教学 Python支持多种数据类型&#xff0c;每种类型有其特定的用途和特点。以下是Python中常见的数据类型及其示例。 1. 基本数据类型 整数&#xff08;int&#xff09; 整数是没有小数部分的数字。例如&#xff1a;-2, -1, 0, 1, 2 a 10 b -5 print(type(a)…

多元多项式的特征列与零点的关系定理

下面这个定理来自《计算机代数》6.1三角列与特征列&#xff08;王东明、夏壁灿著&#xff09; 【定理】 设 C [ C 1 , … , C r ] \mathbb{C }\left\lbrack C_{1},\ldots,C_{r} \right\rbrack C[C1​,…,Cr​]为多项式组 P ⊂ K [ x ] \mathbb{P \subset}\mathcal{K\lbrack}\…

Java共享台球室无人系统支持微信小程序+微信公众号

共享台球室无人系统 &#x1f3b1; 创新台球体验 近年来&#xff0c;共享经济如火如荼&#xff0c;从共享单车到共享汽车&#xff0c;无一不改变着我们的生活方式。而如今&#xff0c;这一模式已经渗透到了更多领域&#xff0c;共享台球室便是其中之一。不同于传统的台球室&a…