SpringMVC的数据绑定
一、前言
SpringMVC的数据绑定是指将HTTP请求参数绑定到Java对象上。这样可以方便地从请求中获取数据并将其传递给业务逻辑。在SpringMVC中,可以使用@RequestParam和@ModelAttribute等注解来实现数据绑定。
二、使用@RequestParam注解
@RequestParam注解用于将请求参数绑定到方法的参数上。它可以指定参数的名称、是否必需、默认值等。下面是一个例子:
@Controller
public class UserController { @RequestMapping("/user/login") public String login(@RequestParam("username") String name, @RequestParam("password") String password, Model model) { // 业务逻辑处理 return "loginSuccess"; }
}
在上面的例子中,我们使用@RequestParam注解将请求参数username和password绑定到login()方法的name和password参数上。如果请求中没有username或password参数,或者它们的值为空,SpringMVC会抛出异常。我们可以使用required属性指定参数是否必需,使用defaultValue属性指定参数的默认值。
三、使用@ModelAttribute注解
@ModelAttribute注解用于将请求参数绑定到Java对象上。它可以指定对象的名称,也可以指定绑定参数的名称。下面是一个例子:
@Controller
public class UserController { @RequestMapping("/user/register") public String register(@ModelAttribute("user") User user, Model model) { // 业务逻辑处理 return "registerSuccess"; }
}
在上面的例子中,我们使用@ModelAttribute注解将请求参数绑定到User对象上。这里我们指定了对象的名称为"user",SpringMVC会自动将请求参数名称和User对象的属性名称进行匹配并进行绑定。如果User对象中有与请求参数名称不一致的属性,可以使用@RequestParam注解进行单独绑定。
需要注意的是,使用@ModelAttribute注解进行数据绑定时,如果请求中没有对应的参数或者参数值为空,SpringMVC会将对象的属性值设置为null,而不会抛出异常。如果需要对参数进行校验,可以使用Spring的校验框架Hibernate Validator来实现。
四、自定义数据绑定
除了使用@RequestParam和@ModelAttribute注解进行数据绑定外,还可以自定义数据绑定。自定义数据绑定需要实现org.springframework.web.bind.ServletRequestDataBinder接口的bind()方法,对数据进行手动解析并设置到Java对象上。下面是一个例子:
public class CustomDataBinder implements ServletRequestDataBinder { @Override public void bind(ServletRequest request, Object target) throws Exception { String username = request.getParameter("username"); String password = request.getParameter("password"); User user = (User) target; user.setUsername(username); user.setPassword(password); }
}
在上面的例子中,我们自定义了一个数据绑定器CustomDataBinder,实现了ServletRequestDataBinder接口的bind()方法。在bind()方法中,我们从请求中获取username和password参数,并将其设置到User对象的属性中。要使用自定义数据绑定器,需要在控制器类上添加@InitBinder注解并指定数据绑定器的类名:
@Controller
public class UserController { @InitBinder("user") public void initBinder(WebDataBinder binder) { binder.setBinder(new CustomDataBinder()); } // ...其他方法...
}
```在上面的例子中,我们使用@InitBinder注解指定了使用CustomDataBinder进行数据绑定的对象名称为"user"。这样,在处理请求时,SpringMVC会自动调用CustomDataBinder的bind()方法进行数据绑定。
相关文章:
SpringMVC的数据绑定
一、前言 SpringMVC的数据绑定是指将HTTP请求参数绑定到Java对象上。这样可以方便地从请求中获取数据并将其传递给业务逻辑。在SpringMVC中,可以使用RequestParam和ModelAttribute等注解来实现数据绑定。 二、使用RequestParam注解 RequestParam注解用于将请求参…...
1.1.OpenCV技能树--第一单元--OpenCV简介
目录 1.文章内容来源 2.OpenCV简介 3.课后习题代码复现 4.易错点总结与反思 1.文章内容来源 1.题目来源:https://edu.csdn.net/skill/practice/opencv-77f629e4593845b0bf97e74ca8ec95ae/8292?languageopencv&materialId20807 2.资料来源:https://edu.csdn.net/skill…...
transformer不同的包加载模型的结构不一样
AutoModel AutoModelForTokenClassification 结论: AutoModel加载的模型与AutoModelForTokenClassification最后一层是不一样的,从这个模型来看,AutoModelForTokenClassification加载的结果是对的 问题: 为什么AutoModel和Aut…...
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外,还支持…...
C语言:选择+编程(每日一练Day9)
目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:自除数 思路一: 题二:除自身以外数组的乘积 思路二: 本人实力有限可能对…...
蓝桥等考Python组别十三级003
第一部分:选择题 1、Python L13 (15分) 运行下面程序,输出的结果是( )。 t = (1, 2, 2, 1, 4, 3, 2) print(t.count(2)) 1234正确答案:C 2、Python L13 (...
2023年CSP-J真题详解+分析数据(选择题篇)
目录 前言 2023CSP-J江苏卷详解 小结 前言 下面由我来给大家讲解一下CSP-J的选择题部分。 2023CSP-J江苏卷详解 1.答案 A 解析:const在C中是常量的意思,其作用是声明一个变量,值从头至尾不能被修改 2.答案 D 解析:八进制…...
基于三平面映射的地形纹理化【Triplanar Mapping】
你可能遇到过这样的地形:悬崖陡峭的一侧的纹理拉伸得如此之大,以至于看起来不切实际。 也许你有一个程序化生成的世界,你无法对其进行 UV 展开和纹理处理。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 三平面映射(Trip…...
初步了解nodejs语法和web模块
在此, 第一个Node.js实例_js firstnode-CSDN博客 通过node运行一个简单的server.js,实现了一个http服务器; 但是还没有解析server.js的代码,下面看一下; require 指令 在 Node.js 中,使用 require 指令来…...
51单片机+EC11编码器实现可调参菜单+OLED屏幕显示
51单片机+EC11编码器实现可调参菜单+OLED屏幕显示 📍相关篇《stc单片机使用外部中断+EC11编码器实现计数功能》 🎈《STC单片机+EC11编码器实现调节PWM输出占空比》 🌼实际操作效果 🍁整个项目实现框架: 📓EC11接线原理图: 📓项目工程简介 📝仅凭借一个EC11编…...
数据结构刷题训练——二叉树篇(一)
📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 👍…...
2023版 STM32实战5 基本定时器中断
基本定时器简介与特性 -1-时钟可分频 -2-计数模式只可以选择累加 -3-只可以用来定时(含中断) 查看时钟源 如图定时器7的时钟最大为72MHZ 定时时间的计算 通用定时器的时间计算公式为 Tout ((arr1)(psc1&…...
css3实现页面元素抖动效果
html <div id"shake" class"shape">horizontal shake</div>js(vue3) function shake(elemId) {const elem document.getElementById(elemId)console.log(获取el, elem)if (elem) {elem.classList.add(shake)setTimeou…...
[架构之路-232]:操作系统 - 文件系统存储方法汇总
目录 前言: 一、文件系统存储方法基本原理和常见应用案例: 二、Windows FAT文件系统 2.1 概述 三、Linux EXT文件系统 3.1 基本原理 3.2 索引节点表(Inode Table) 3.2.1 索引节点表层次结构 3.2.2 间接索引表的大小和表项…...
简述 AOP 动态代理
一、AopAutoConfiguration 源码: Configuration(proxyBeanMethods false) ConditionalOnProperty(prefix "spring.aop", name "auto", havingValue "true", matchIfMissing true) public class AopAutoConfiguration {Configur…...
机器学习基础之《分类算法(8)—随机森林》
一、什么是集成学习方法 1、定义 集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测 谚语:三个臭皮匠顶个诸…...
Python数据攻略-Pandas进行CSV和Excel文件读写
在数据分析的世界里,能够读取和写入不同格式的文件是一项基本而重要的技能。CSV(逗号分隔值)和Excel是两种常见的数据存储格式。它们在商业、科研、教育等多个领域都有广泛应用。 文章目录 读取CSV文件`pd.read_csv()` 文件读取函数的基本用法`DataFrame.to_csv()` 数据写入…...
lv7 嵌入式开发-网络编程开发 13 UNIX域套接字
1 UNIX 域流式套接字 本地地址 struct sockaddr_un {unsigned short sun_family; /* 协议类型 */char sun_path[108]; /* 套接字文件路径 */ };UNIX 域流式套接字的用法和 TCP 套接字基本一致,区别在于使用的协议和地址不同 UNIX 域流式套接字服务器端…...
blender光照系统设置
0)Viewport Shading设置里面的Lighting下面的参数: Scene Lights,Scene World - Scene Lights是指在渲染模式下是否使用场景中的灯光对象来照亮物体。 - Scene World是指在渲染模式下是否使用场景中的世界设置来作为背景和环境光。如果关闭该选项&#…...
华为云云耀云服务器L实例评测|基于canal缓存自动更新流程 SpringBoot项目应用案例和源码
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在之前的博客中,介绍过canal的安装和配置,参考博客 拉取创建canal镜像配置相关参数 & …...
5个步骤掌握Happy Island Designer:从新手到岛屿设计大师的终极指南
5个步骤掌握Happy Island Designer:从新手到岛屿设计大师的终极指南 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Ani…...
告别终端焦虑:用Screen在服务器上跑深度学习,关掉XShell程序照样跑
告别终端焦虑:用Screen在服务器上稳定运行深度学习任务 每次在远程服务器上启动深度学习训练任务时,最担心的莫过于网络波动或不小心关闭终端导致数小时的计算成果付之东流。这种"终端焦虑"困扰着许多研究人员和工程师。本文将深入探讨如何利…...
【408硬核笔记】计组:定点数运算、移位与溢出判定终极总结
✍️ 前言 作为一名 27 考研 选手,计组的定点数运算是 408 基础中的“重灾区”。今天的笔记重点在于移位规则与溢出判断。拒绝云玩家,直接上硬核干货,建议收藏作为考前速查手册。一、 移位运算:逻辑 vs 算术 移位运算在底层电路中…...
从高德、百度地图下载POI数据?用这个工具5分钟搞定GCJ02/BD09到WGS84的坐标纠偏
互联网地图数据纠偏实战:5分钟实现GCJ02/BD09到WGS84的高效转换 当你从高德地图API获取的商铺位置数据导入ArcGIS后,发现所有点位都偏离实际位置数百米;或是将百度地图的行政区划边界加载到QGIS中,与卫星影像完全无法匹配——这并…...
别再手动拆数据了!一个SQL搞定MySQL中‘天赋’、‘标签’等多值字段的拆分与统计
MySQL多值字段拆分实战:从竖线分隔到高效统计的完整指南 在用户画像分析、商品分类统计或游戏角色技能管理等业务场景中,我们经常会遇到数据库表设计中使用单个字段存储多个值的情况。这种设计虽然节省了表空间,却给后续的查询和统计分析带来…...
终极Windows激活指南:KMS_VL_ALL_AIO智能脚本一键解决系统激活难题
终极Windows激活指南:KMS_VL_ALL_AIO智能脚本一键解决系统激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows系统显示"需要激活"而感到困扰&a…...
高校…实验室环境应用lims实验动物中心智能化管理系统设计建设哪个好?
不同行业类型的智慧实验室系统哪个好?建设与设计一套专属于自己的lims,是增强实验室各方面能力的有效方式,其中盛元广通实验动物中心智能化管理系统是当前先进AI与大数据融合物联网的合规化管控平台,应用于高校实验室管理系统分类…...
iOS AVFoundation实战:视频播完别急着返回,这3种播放结束处理方案你选哪个?
iOS视频播放结束体验设计:从技术实现到用户心理的深度解析 当用户沉浸在视频内容中,最后一个画面淡出时,那一刻的交互体验往往决定了他们是否会继续留在你的应用里。作为产品设计者,我们面临的不仅是一个技术问题,更是…...
如何10分钟内搭建BepInEx游戏插件框架:完整入门指南
如何10分钟内搭建BepInEx游戏插件框架:完整入门指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款功能强大的游戏插件框架,专为Unity Mono、…...
从30秒到3秒:fmt编译时优化技巧终结C++项目构建噩梦
从30秒到3秒:fmt编译时优化技巧终结C项目构建噩梦 【免费下载链接】fmt A modern formatting library 项目地址: https://gitcode.com/GitHub_Trending/fm/fmt 在C开发中,冗长的编译时间常常成为开发者 productivity 的隐形杀手。fmt作为一款现代…...
