当前位置: 首页 > news >正文

关于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、请求体

参数映射规则

  1. 基本类型和包装类型
    • 当查询参数是基本类型(如int、double、boolean等)或其对应的包装类型时,SpringMVC框架会尝试将字符串形式的查询参数自动转换为相应的类型。
  1. 日期和时间类型
    • 如果方法参数是一个java.util.Date或者Java 8引入的java.time包中的日期/时间类,Spring MVC可以通过@DateTimeFormat注解指定日期时间格式,并据此解析查询参数。
  1. 数组和集合
    • 通过逗号分隔的查询参数可以被转换为数组或List类型的参数。例/api/setmeal?ids=1,2,3,4
    • 若前端传递的是多个同名查询参数,如?ids=1&ids=2&ids=3,也会自动收集到一个数组或List中。
  1. 自定义对象
    • 对于复杂类型,如自定义对象,可以通过@ModelAttribute或@RequestBody注解结合Jackson库(JSON序列化/反序列化库)进行绑定和转换。

查询参数也可以使用一个实体类型接收,但是要注意以下情况:

GET请求中使用实体类来接收所有可能的参数,并且有以下两种情况:

  1. json未传入实体类中存在的属性: 如果实体类中有某些属性在请求中没有对应的参数,那么在默认情况下,这些属性的值将会是它们的默认值(例如基本类型为0或null,对象引用为null)。实体类中的字段如果没有提供默认值,也不会自动填充,将在控制器方法中保持null状态。
  2. 实体类中不存在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、查询参数&路径参数 查询参数&#xff1a; URI:/teachers?typeweb GetMapping("/klasses/teachers") public List<Teacher> getKlassRelatedTeachers(String type ) { ... }如果查询参数type与方法的名称相同&#xff0c;则直接将web传入…...

【排序】归并排序(C语言实现)

文章目录 1. 递归版的归并排序1.1 归并排序的思想2. 递归版的归并排序的实现 2. 非递归版的归并排序 1. 递归版的归并排序 1.1 归并排序的思想 归并排序&#xff08;MERGE - SORT&#xff09;是建立在归并操作上的一种有效的排序算法, 该算法是采用分治法&#xff08;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 …...

计算机算法贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种常见的算法思想&#xff0c;它在每一步选择当前状态下最优的解决方案&#xff0c;从而希望最终能够达到全局最优解。 贪心算法的基本思路是每一步都选择当前状态下的局部最优解&#xff0c;而忽略了当前选择所带来的影…...

基于css实现动画效果

介绍 本文将会基于css&#xff0c;实现各种动画效果&#xff0c;接下来会从简单几个例子入手。 案例 三颗球 <!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.将文件上传至云服务器 客户端上传&#xff1a;客户端将数据提交给云服务器&#xff0c;并等待其响应&#xff1b;用户…...

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 源代码&#xff1a; #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入门到放弃

参考文档&#xff1a;SpringData JPA&#xff1a;一文带你搞懂 - 知乎 (zhihu.com) 一、 前言 1.1 概述 Java持久化技术是Java开发中的重要组成部分&#xff0c;它主要用于将对象数据持久化到数据库中&#xff0c;以及从数据库中查询和恢复对象数据。在Java持久化技术领域&a…...

MES系统数据采集的几种方式

生产制造执行MES系统具有能够帮助企业实现生产数据收集与分析、生产计划管理、生产过程监控等的功能板块&#xff0c;在这里小编就不一一介绍了&#xff0c;主要讲讲它的数据采集功能板块&#xff0c;可以说&#xff0c;数据采集是该系统进行数据统计与生产管理等后续工作的基础…...

铭文 LaunchPad 平台 Solmash 推出早鸟激励计划

为感谢用户对Solmash的支持&#xff0c;Solmash 特别推出“Solmash早鸟激励计划”&#xff0c;以回馈社区的早期参与者&#xff0c;这是专为已经参与Staking Pool或Honest Pool的用户推出的激励。 Solmash NFT激励 被列入早鸟计划的用户&#xff0c;可通过点击&#xff1a;sol…...

【前端规范】

1 前言 HTML 作为描述网页结构的超文本标记语言&#xff0c;一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持一致&#xff0c;容易被理解和被维护。 2 代码风格 2.1 缩进与换行 [强制] 使用 4 个空格做为一个缩进层级&#xff0c;不允许使用 2 个空格 或 tab 字符…...

12、JVM高频面试题

1、JVM的主要组成部分有哪些 JVM主要分为下面几部分 类加载器&#xff1a;负责将字节码文件加载到内存中 运行时数据区&#xff1a;用于保存java程序运行过程中需要用到的数据和相关信息 执行引擎&#xff1a;字节码文件并不能直接交给底层操作系统去执行&#xff0c;因此需要…...

【Docker】Docker安装入门教程及基本使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…...

语义解析:如何基于SQL去实现自然语言与机器智能连接的桥梁

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 语义解析 定义 作用 语义解析的应用场景 场景一&#xff1a; 场景二&#xff1a; 总结语…...

Java项目:117SpringBoot动漫论坛网站

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 117SpringBoot动漫论坛网站 一、项目介绍 动漫论坛网站是由SpringBootMybatis开发的&#xff0c;旅游网站分为前台和后台&#xff0c;前台为用户浏览&#xff0c;后台进…...

Jenkins基础篇--添加节点

节点介绍 Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点)&#xff0c;分布式构建能够让同一套代码在不同的环境(如&#xff1a;Windows 和 Linux 系统)中编译、测试等。 Jenkins 运行的主机在逻辑上是 master 节点&#xff0c;下图是主节点和从节点的关系。 添加节点 …...

【C++】手撕 list类(包含迭代器)

目录 1&#xff0c;list的介绍及使用 2&#xff0c;list_node 3&#xff0c;list_node() 3&#xff0c;list 4&#xff0c;list() 5&#xff0c;push_back(const T& x) 6&#xff0c;print() 7&#xff0c;_list_iterator 8&#xff0c;operator*() 9&#xff0c…...

@Autowired 和 @Resource 的区别是什么?

Java面试题目录 Autowired 和 Resource 的区别是什么&#xff1f; Autowired 是 Spring 提供的注解。默认的注入方式为byType&#xff08;根据类型进行匹配&#xff09;。 Resource 是 JDK 提供的注解。默认注入方式为 byName&#xff08;根据名称进行匹配&#xff09;。 当一…...

自托管信息聚合器FeedMe:全栈部署与高效信息管理实践

1. 项目概述&#xff1a;一个“喂饱”你的信息聚合器最近在折腾一个挺有意思的小项目&#xff0c;叫 FeedMe。这名字起得挺直白&#xff0c;翻译过来就是“喂我”。它的核心目标&#xff0c;就是帮你把散落在互联网各个角落的信息源——比如你关注的博客、技术论坛、新闻网站、…...

GD32F103C8T6烧录方式全解析:串口ISP、ST-Link Utility、Keil在线,哪种最适合你?

GD32F103C8T6烧录方案深度评测&#xff1a;从原型开发到量产部署的全场景指南 在嵌入式开发领域&#xff0c;选择正确的程序烧录方式往往决定着开发效率和生产成本。作为STM32F103的国产替代方案&#xff0c;GD32F103C8T6凭借其出色的性价比赢得了广泛关注。但许多开发者在迁移…...

无线渗透测试框架Airecon:自动化工具链整合与实战应用

1. 项目概述与核心价值最近在整理自己的渗透测试工具箱时&#xff0c;又翻出了pikpikcu/airecon这个老伙计。说实话&#xff0c;在无线安全评估这个细分领域里&#xff0c;它可能不是名气最响的那个&#xff0c;但绝对是我个人在内部网络渗透和红队演练中最顺手、最高效的“组合…...

5分钟掌握小红书无水印下载:让内容保存效率提升300%

5分钟掌握小红书无水印下载&#xff1a;让内容保存效率提升300% 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、用户链接&#…...

轻量级监控系统Monikhao:自托管部署与核心架构解析

1. 项目概述&#xff1a;一个轻量级、可自托管的监控解决方案最近在折腾个人服务器和家庭网络监控时&#xff0c;发现了一个挺有意思的项目&#xff1a;khaodius/monikhao。乍一看这个名字&#xff0c;可能会觉得有点陌生&#xff0c;但如果你对自建监控系统有需求&#xff0c;…...

Blitz.js全栈开发框架:零API理念与Next.js深度集成实战

1. 项目概述&#xff1a;一个颠覆性的全栈开发框架如果你和我一样&#xff0c;在过去的几年里&#xff0c;一直在React生态圈里打转&#xff0c;从Create React App到Next.js&#xff0c;再到尝试自己搭建一套包含身份验证、数据层、API路由的完整应用&#xff0c;那你一定对那…...

从零构建专属大语言模型:Self-LLM开源项目全流程实践指南

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为datawhalechina/self-llm的项目引起了我的注意。乍一看&#xff0c;这像是一个关于大语言模型&#xff08;LLM&#xff09;的仓库&#xff0c;但“self”这个前缀又让人浮想联翩。经过一段时间的深入研究和实践&…...

基于Docker构建标准化开发环境:原理、实践与VSCode集成指南

1. 项目概述&#xff1a;一个面向开发者的“开箱即用”环境在软件开发这条路上&#xff0c;我踩过最多的坑&#xff0c;往往不是来自复杂的业务逻辑&#xff0c;而是来自那句“在我机器上好好的”。环境配置&#xff0c;这个看似基础却又无比磨人的环节&#xff0c;消耗了无数开…...

Python Pydantic介绍(数据校验、自动类型转换、结构化数据建模、序列化JSON、配置管理)pydantic-settings、核心BaseModel、字段约束Field()、FastAPI

文章目录Python 数据校验神器&#xff1a;Pydantic 完全指南一、什么是 Pydantic二、Pydantic 能解决什么问题1&#xff09;数据校验&#xff08;Validation&#xff09;2&#xff09;自动类型转换&#xff08;Parsing&#xff09;3&#xff09;结构化数据建模4&#xff09;序列…...

基于CircuitPython的嵌入式游戏开发:从帧缓冲区到对象池的Flappy Bird实现

1. 项目概述&#xff1a;当Flappy Bird遇上CircuitPython如果你玩过经典的Flappy Bird&#xff0c;也捣鼓过像Raspberry Pi Pico这样的微控制器&#xff0c;那你有没有想过把这两者结合起来&#xff1f;我最近就用CircuitPython在RP2040开发板上完整复刻了一个“猫版”Flappy B…...