SpringMVC的@InitBinder的作用

2023-11-01

一、前言

在SpringMVC中,@InitBinder注解用于自定义数据绑定的方法。在使用表单提交数据时,SpringMVC会将请求参数绑定到Java对象中。但是,有些时候请求参数的数据格式可能与Java对象的属性格式不一致,这时就需要使用@InitBinder注解来自定义数据绑定的方法。

@InitBinder注解的方法会在每个请求处理之前被调用,可以用来对请求参数进行处理,将其转换为Java对象属性的格式。@InitBinder注解的方法必须返回void类型,并且必须接受一个WebDataBinder参数。

二、举例

@Controller  
public class UserController {  
  
    @InitBinder  
    public void initBinder(WebDataBinder binder) {  
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
        dateFormat.setLenient(false);  
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));  
    }  
  
    @RequestMapping("/user")  
    public String addUser(User user) {  
        // 处理用户信息  
        return "success";  
    }  
}

在上面的例子中,我们使用@InitBinder注解定义了一个initBinder方法。在该方法中,我们使用SimpleDateFormat类创建了一个日期格式化对象,并将其设置为非宽松模式。然后,我们调用WebDataBinder的registerCustomEditor方法,注册了一个自定义的日期编辑器。这个自定义的日期编辑器会将请求参数中的日期字符串转换为Java对象中的Date类型。

在处理用户信息的addUser方法中,我们可以直接使用User对象来接收请求参数,而不需要关心日期字符串的格式转换问题。因为@InitBinder注解的initBinder方法已经在每个请求处理之前将请求参数转换为了Java对象属性的格式。

需要注意的是,@InitBinder注解的方法会在每个请求处理之前被调用,因此不应该在该方法中执行耗时的操作。同时,如果一个Controller中有多个处理请求的方法,那么每个方法都会执行一次@InitBinder注解的方法。因此,如果有多个方法需要使用相同的数据绑定规则,可以将@InitBinder注解的方法抽取到一个公共的父类或者配置文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC的@InitBinder的作用 的相关文章

  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • Flask后端部署到云服务器

    1 本地写好代码 2 码云创建仓库 上传本地代码到创库 git init git remote add origin https gitee com 自己的仓库 git git pull origin master git add git
  • 1 在 Linux 下开机自动重启脚本(亲测)

    etc rc local 开机启动程序 把需要开机自动运行的程序写在这个脚本里 etc init d 这个目录存放的是一些脚本 一般是linux以rpm包安装时设定的一些服务的启动脚本 要重新启动 sendmail 的话 而且你的 send
  • Tensorflow的Bazel编程(二)

    转自 http blog csdn net langb2014 article details 54312697 安装官网 https bazel build versions master docs tutorial Java html
  • springboot整合fisco

    Spring Boot连接Fisco Bcos区块链 使用spring boot连接Fisco Bcos 在Fisco Bcos的官方提供了Java Sdk工具用于连接 Java SDK 提供了访问 FISCO BCOS 节点的Java A
  • 飞机降落(dfs+贪心思想)

    飞机降落 dfs 贪心思想 原题链接 4957 飞机降落 AcWing题库 思路分析 通过读题易知 题目可以翻译为 已知有 n 条线段 每条线段都可以在一定的区域内滑动 需要我们来判断是否可以找到一种线段的分布方案 使得每条线段都不相交 首
  • stl::(8)set容器API

    set根据元素键值自动被排序 迭代器不能修改键值 键值唯一不重复 set 构造函数 set
  • C和C++安全编码笔记:指针诡计

    指针诡计 pointer subterfuge 是通过修改指针值来利用程序漏洞的方法的统称 可以通过覆盖函数指针将程序的控制权转移到攻击者提供的外壳代码 shellcode 当程序通过函数指针执行一个函数调用时 攻击者提供的代码将会取代原本
  • 深度学习之感知机学习算法

    一 感知机模型 感知机是一种较为简单的二分类模型 但由简至繁 感知机却是神经网络和支持向量机的基础 感知机旨在学习能够将输入数据划分为 1 1的线性分离超平面 所以感知机是一种线性模型 由输入空间到输出空间到函数为 其中x为实例的特征向量
  • c语言程序学生籍贯信息记录,C语言程序设计学生籍贯信息记录簿

    C语言程序设计学生籍贯信息记录簿 编制一个学生籍贯信息记录簿 每个学生信息包括 学号 姓名 籍贯 具体功能 1 创建信息链表并以磁盘文件保存 2 读取磁盘文件并显示输出所有学生的籍贯信息 3 按学号或姓名查询其籍贯 4 按籍贯查询并输出该籍
  • 阻止 JetBrains 的 IDE 自动去掉行尾空格

    起因 最近换了电脑 然后重新装了一堆堆 IDE 包括 Pycharm RubyMine 和 GoLand等 发现 RubyMine 修改某一行的代码后 Ctrl S 保存 结果 IDE 将文件的所有行末尾的空格都自动给去掉了 但是这样就会有
  • git报错kex_exchange_identification

    完整报错 环境 windows10电脑 ssh方式拉取git代码 FATAL Unable to connect to relay host errno 10061 kex exchange identification Connectio
  • mysql 默认连接数和timeout_mysql和连接相关的timeout

    MySQL和连接相关的timeout 今天同事问为什么查询mysql库时 在数据量比较大时 会话总断 刚开始以为是mysql的和连接有关timeout的问题 结果是网络的不稳定的原因 下面总结下和连接有关的timeout slave net
  • Windows安装Java并配置环境变量

    jdk 下载 链接 链接 https pan baidu com s 1j F3kJaGePaT6AJy6iMJvQ 提取码 GYHH 来自百度网盘超级会员V1的分享 打开下载好的安装包 全部默认下载即可 下载完成后一定要记住自己的安装路径
  • oracle 怎么去掉小数位,Oracle 去掉小数终了的0的方法

    Oracle 去掉小数末尾的0的方法 Oracle PL SQL查询语句有的时候要将number类型的字段转换成varchar2类型在报表或页面上经常会出现 440 4411 010 100之类的数据 要不就是小数点前面的0被to char
  • FileZilla,读取目录列表失败(425 Can‘t open data connection.)的解决办法

    因为对外FTP客户要求安全升级的原因 针对部分FTP User启用了SSL认证功能 启用方式 1 建立FTP User时 Force SSL for user login 前面打勾 2 启用被动传输模式 进入FileZilla Server
  • SpringMVC如何在web.xml中配置DispatcherServlet呢?

    转自 SpringMVC如何在web xml中配置DispatcherServlet呢 下文讲述SpringMVC中对DispatcherServlet进行配置的方法分享 如下所示 实现思路 只有在web xml中Servlet处理类指向D
  • 如何实现审核功能

    如何实现审核功能 开发工具与关键技术 VS C 作者 撰写时间 2019 7 26 如何实现审核的功能呢 首先是实现弹出审核模态框和重置表单 再通过ID获取要审核的数据和使用post获取到通过ID查询的数据 用loadDatatoForm回
  • IEqualityComparer VS System.IEquatable

    类似于IComparer
  • vuejs 原生JS 拖拽事件案例

    原生JS or Vue 事件案例合集 详细 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 Section 1 单个或多个鼠标拖拽事件的理解 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 原生
  • SpringMVC的@InitBinder的作用

    一 前言 在SpringMVC中 InitBinder注解用于自定义数据绑定的方法 在使用表单提交数据时 SpringMVC会将请求参数绑定到Java对象中 但是 有些时候请求参数的数据格式可能与Java对象的属性格式不一致 这时就需要使用