关于SpringMVC前后端传值总结
一、传递方式
1、查询参数&路径参数
查询参数: URI:/teachers?type=web
@GetMapping("/klasses/teachers")
public List<Teacher> getKlassRelatedTeachers(String type ) {
...
}
如果查询参数type与方法的名称相同,则直接将web传入type参数。如果不同则使用@RequestParma注解指定名称。@RequestParma注解使用方法自行百度。如果没有传入相应的参数的话,那么框架会把该形参设置为默认值。
注意!!! 如果在参数上加入了@RequestParam注解的话,并且没有指定它的required属性为false(required默认为true代表必须提供该参数),如果前端没有传递该参数的话会报错!!
路径参数:
/klasses/{klassId}
@PathVariable用于获取路径参数
@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(@PathVariable("klassId") Long klassId,@RequestParam(value = "type", required = false) String type ) {
...
}
2、请求体
参数映射规则
- 基本类型和包装类型:
-
- 当查询参数是基本类型(如int、double、boolean等)或其对应的包装类型时,SpringMVC框架会尝试将字符串形式的查询参数自动转换为相应的类型。
- 日期和时间类型:
-
- 如果方法参数是一个java.util.Date或者Java 8引入的java.time包中的日期/时间类,Spring MVC可以通过@DateTimeFormat注解指定日期时间格式,并据此解析查询参数。
- 数组和集合:
-
- 通过逗号分隔的查询参数可以被转换为数组或List类型的参数。例/api/setmeal?ids=1,2,3,4
- 若前端传递的是多个同名查询参数,如?ids=1&ids=2&ids=3,也会自动收集到一个数组或List中。
- 自定义对象:
-
- 对于复杂类型,如自定义对象,可以通过@ModelAttribute或@RequestBody注解结合Jackson库(JSON序列化/反序列化库)进行绑定和转换。
查询参数也可以使用一个实体类型接收,但是要注意以下情况:
GET请求中使用实体类来接收所有可能的参数,并且有以下两种情况:
- json未传入实体类中存在的属性: 如果实体类中有某些属性在请求中没有对应的参数,那么在默认情况下,这些属性的值将会是它们的默认值(例如基本类型为0或null,对象引用为null)。实体类中的字段如果没有提供默认值,也不会自动填充,将在控制器方法中保持null状态。
- 实体类中不存在json请求传入的参数: 对于GET请求而言,如果请求包含了实体类中没有定义的参数,Spring MVC在处理这些参数时会忽略它们,不会引发错误,除非你配置了严格的模式来检查未知的请求参数。
GET请求参数通常是通过查询参数(query parameters)的形式附加在URL后,或者作为路径变量(path variables)嵌入在URI路径中。而POST、PUT等请求通常会使用@RequestBody注解结合JSON数据将请求体映射到一个实体类。
使用@RequestBody注解声明的形参,如果传入的JSON数据中没有对应的属性:
- 默认情况下,Spring MVC会尝试将接收到的所有JSON数据映射到该形参对应的Java对象上。如果没有包含与Java对象属性相对应的JSON字段,则该Java对象中对应属性的值将会是它们的默认值(如基本类型为0或null,对象引用为null)。也就是说,如果没有传入该形参的属性,不会直接导致错误,但未传入的属性在Java对象中将保持未初始化状态。
- 对于传入了额外的、形参没有的属性:如果传入的JSON数据包含了一些在Java对象中不存在的属性,Jackson等JSON库在默认情况下会忽略这些额外的属性,不会直接引发错误。除非你配置了严格的JSON解析模式(例如启用DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES),在这种严格模式下,未知属性会导致反序列化失败并抛出异常。
相关文章:
关于SpringMVC前后端传值总结
一、传递方式 1、查询参数&路径参数 查询参数: URI:/teachers?typeweb GetMapping("/klasses/teachers") public List<Teacher> getKlassRelatedTeachers(String type ) { ... }如果查询参数type与方法的名称相同,则直接将web传入…...
【排序】归并排序(C语言实现)
文章目录 1. 递归版的归并排序1.1 归并排序的思想2. 递归版的归并排序的实现 2. 非递归版的归并排序 1. 递归版的归并排序 1.1 归并排序的思想 归并排序(MERGE - SORT)是建立在归并操作上的一种有效的排序算法, 该算法是采用分治法(Divide a…...
127. 单词接龙
和433.最小基因变化这道题一样的解法。 https://blog.csdn.net/qq_43606119/article/details/135538247 class Solution {public int ladderLength(String beginWord, String endWord, List<String> wordList) {Set<String> cnt new HashSet<>();for (int …...
计算机算法贪心算法
贪心算法(Greedy Algorithm)是一种常见的算法思想,它在每一步选择当前状态下最优的解决方案,从而希望最终能够达到全局最优解。 贪心算法的基本思路是每一步都选择当前状态下的局部最优解,而忽略了当前选择所带来的影…...
基于css实现动画效果
介绍 本文将会基于css,实现各种动画效果,接下来会从简单几个例子入手。 案例 三颗球 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><title>React App</title><style>…...
18.将文件上传至云服务器 + 优化网站的性能
目录 1.将文件上传至云服务器 1.1 处理上传头像逻辑 1.1.1 客户端上传 1.1.2 服务器直传 2.优化网站的性能 2.1 本地缓存优化查询方法 2.2 压力测试 1.将文件上传至云服务器 客户端上传:客户端将数据提交给云服务器,并等待其响应;用户…...
Linux: module: kheaders;CONFIG_IKHEADERS
文章目录 参考错误开一个玩笑。configcommit参考 https://github.com/iovisor/bcc/pull/2312 https://github.com/iovisor/bcc/pull/3588 https://bugs.gentoo.org/809347 https://lore.kernel.org/lkml/20190408212855.233198-1-joel@joelfernandes.org/ 错误 <built-in…...
Page 251~254 Win32 GUI项目
win32_gui 源代码: #if defined(UNICODE) && !defined(_UNICODE)#define _UNICODE #elif defined(_UNICODE) && !defined(UNICODE)#define UNICODE #endif#include <tchar.h> #include <windows.h>/* Declare Windows procedure */…...
Kafka(七)可靠性
目录 1 可靠的数据传递1.1 Kafka的可靠性保证1.2 复制1.3 Broker配置1.3.1 复制系数1.3.2 broker的位置分布1.3.3 不彻底的首领选举1.3.4 最少同步副本1.3.5 保持副本同步1.3.6 持久化到磁盘flush.messages9223372036854775807flush.ms9223372036854775807 1.2 在可靠的系统中使…...
Spring Data JPA入门到放弃
参考文档:SpringData JPA:一文带你搞懂 - 知乎 (zhihu.com) 一、 前言 1.1 概述 Java持久化技术是Java开发中的重要组成部分,它主要用于将对象数据持久化到数据库中,以及从数据库中查询和恢复对象数据。在Java持久化技术领域&a…...
MES系统数据采集的几种方式
生产制造执行MES系统具有能够帮助企业实现生产数据收集与分析、生产计划管理、生产过程监控等的功能板块,在这里小编就不一一介绍了,主要讲讲它的数据采集功能板块,可以说,数据采集是该系统进行数据统计与生产管理等后续工作的基础…...
铭文 LaunchPad 平台 Solmash 推出早鸟激励计划
为感谢用户对Solmash的支持,Solmash 特别推出“Solmash早鸟激励计划”,以回馈社区的早期参与者,这是专为已经参与Staking Pool或Honest Pool的用户推出的激励。 Solmash NFT激励 被列入早鸟计划的用户,可通过点击:sol…...
【前端规范】
1 前言 HTML 作为描述网页结构的超文本标记语言,一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持一致,容易被理解和被维护。 2 代码风格 2.1 缩进与换行 [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符…...
12、JVM高频面试题
1、JVM的主要组成部分有哪些 JVM主要分为下面几部分 类加载器:负责将字节码文件加载到内存中 运行时数据区:用于保存java程序运行过程中需要用到的数据和相关信息 执行引擎:字节码文件并不能直接交给底层操作系统去执行,因此需要…...
【Docker】Docker安装入门教程及基本使用
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 &…...
语义解析:如何基于SQL去实现自然语言与机器智能连接的桥梁
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 语义解析 定义 作用 语义解析的应用场景 场景一: 场景二: 总结语…...
Java项目:117SpringBoot动漫论坛网站
博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 117SpringBoot动漫论坛网站 一、项目介绍 动漫论坛网站是由SpringBootMybatis开发的,旅游网站分为前台和后台,前台为用户浏览,后台进…...
Jenkins基础篇--添加节点
节点介绍 Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点),分布式构建能够让同一套代码在不同的环境(如:Windows 和 Linux 系统)中编译、测试等。 Jenkins 运行的主机在逻辑上是 master 节点,下图是主节点和从节点的关系。 添加节点 …...
【C++】手撕 list类(包含迭代器)
目录 1,list的介绍及使用 2,list_node 3,list_node() 3,list 4,list() 5,push_back(const T& x) 6,print() 7,_list_iterator 8,operator*() 9,…...
@Autowired 和 @Resource 的区别是什么?
Java面试题目录 Autowired 和 Resource 的区别是什么? Autowired 是 Spring 提供的注解。默认的注入方式为byType(根据类型进行匹配)。 Resource 是 JDK 提供的注解。默认注入方式为 byName(根据名称进行匹配)。 当一…...
开发者的软实力:沟通、协作与影响力的修炼手册
在软件开发的精密世界里,代码是骨骼,架构是经脉,而沟通、协作与影响力,则是驱动整个系统顺畅运行的血液与神经。对于软件测试从业者而言,这种认知尤为深刻。我们早已超越了“找Bug”的单一角色,成为质量文化…...
新手福音:在快马平台用自然语言生成你的第一个powershell脚本
今天想和大家分享一个特别适合 PowerShell 新手的入门实践。作为一个从零开始学习 PowerShell 的菜鸟,我发现用自然语言描述需求就能生成可运行的脚本,这个体验真的太友好了。 变量定义与数据结构 刚开始学习时,最基础的就是理解变量和数据结…...
RK3576开发板调试EC11编码器,一分钟就失灵?原来是XL9535芯片这个引脚没上拉
RK3576开发板EC11编码器调试:XL9535中断引脚上拉缺失引发的"一分钟失灵"之谜 刚拿到RK3576开发板时,我满心期待地接上了EC11旋转编码器进行测试——上电后旋转旋钮,系统响应灵敏,GPIO中断触发准确。但正当我准备庆祝调试…...
彻底清除TortoiseSVN:从基础卸载到深度清理全指南
1. 为什么TortoiseSVN卸载这么麻烦? 很多朋友第一次卸载TortoiseSVN时都会遇到各种"后遗症"——右键菜单残留、注册表垃圾、文件夹图标异常。这其实和它的工作原理有关。TortoiseSVN作为Windows资源管理器的Shell扩展,会深度集成到系统底层。我…...
【JupyterLab实战】构建跨平台AI算力监控仪表盘
1. 为什么需要跨平台AI算力监控? 在AI开发过程中,我们经常遇到这样的场景:模型训练到一半突然卡死,却不知道是GPU内存爆了还是CPU瓶颈;多卡并行时某张卡莫名其妙跑不满;昇腾芯片的温度报警频繁触发却找不到…...
一键捕获完整网页:Full Page Screen Capture 高效解决方案
一键捕获完整网页:Full Page Screen Capture 高效解决方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-e…...
51单片机实战:从零构建电子密码锁系统
1. 项目背景与硬件准备 第一次接触51单片机时,我就被它的实用性深深吸引。作为电子爱好者入门的最佳选择,STC89C52这款经典芯片就像乐高积木的基础模块——价格亲民(某宝20元就能买到开发板)、资源丰富(8K Flash、512…...
网站 SEO 标题要包含关键词吗
网站 SEO 标题要包含关键词吗?探讨最佳实践和SEO优化策略 在当今互联网时代,网站的SEO优化已经成为提升网站流量和用户体验的重要手段。其中,网站标题的优化也至关重要。网站 SEO 标题要包含关键词吗?这个问题备受争议,…...
Java继承详解:从基础到实战,吃透面向对象核心特性
哈喽,各位Java学习者!今天咱们深入拆解面向对象编程(OOP)的三大核心特性之一——继承。作为Java开发的基础重点,继承不仅能帮我们实现代码复用、简化开发,更是后续理解多态、抽象类、接口的关键前提。不管你…...
从MATLAB/Python代码实现反推Newmark-β法:理解线性加速度假设如何变成迭代算法
从代码实现反推Newmark-β法:线性加速度假设的工程实践指南 在结构动力学分析中,地震响应、风荷载等时程分析问题常需要求解二阶微分方程。Newmark-β法作为经典数值解法,通过线性加速度假设将连续问题离散化。但教科书往往止步于公式推导&am…...
