@InitBinder 注解

@InitBinder 注解

介绍

@InitBinder注解可以作用在被@Controller注解的类的方法上,表示为当前控制器注册一个属性编辑器,用于对WebDataBinder进行初始化,且只对当前的Controller有效。@InitBinder标注的方法会被多次执行的,也就是说来一次请求就会执行一次@InitBinder注解方法的内容。

  1. @InitBinder注解是在其所标注的方法执行之前被解析和执行;
  2. @InitBinder的value属性,控制的是模型Model里的KEY,而不是方法名;
  3. @InitBinder标注的方法也不能有返回值;
  4. @InitBinder对@RequestBody这种基于消息转换器的请求参数是失效的。

@InitBinder 是 Spring MVC 中的一个注解,用于初始化数据绑定器。它通常用来为特定的请求设置自定义的编辑器,以便将请求参数转换为特定的目标对象类型。通过这种方式,可以控制如何从请求参数中解析数据并将其绑定到 Java 对象中。

作用

用于将前端传递过来的数据进行类型转换或者叫属性编辑,如:将前端传递过来的字符串格式的日期数据,转化为DATE类型。

范围

@InitBinder是属于Controller级别的属性编辑器,并非全局级别(针对所有Controller)的属性编辑器,也就是一个@InitBinder只对当前所在的Controller有效,对其他Controller无效的,如果项目中有多个Controller中都要进属性编辑怎么办呢?一般我们将@InitBinder标注的方法定义在基础的控制器上,所有具体的Controller继承这个基础的Controller即可。

示例

以下是一个使用 @InitBinder 注解的示例:

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.text.SimpleDateFormat;
import java.util.Date;@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");dateFormat.setLenient(false);binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));}@PostMapping("/submit")public String submitForm(@RequestParam("date") Date date) {// 使用绑定后的日期对象处理逻辑System.out.println("Received date: " + date);return "result";}
}

在这个示例中:

  1. @InitBinder 注解的方法 initBinder 接收一个 WebDataBinder 对象。
  2. initBinder 方法中,我们创建了一个自定义的日期编辑器 CustomDateEditor,并将其注册到 WebDataBinder。这样,在处理请求参数时,Spring MVC 会使用这个自定义的编辑器将请求中的字符串日期转换为 Date 对象。
  3. submitForm 方法处理 POST 请求,并接收一个 @RequestParam 注解的 Date 对象。由于我们在 initBinder 方法中注册了自定义编辑器,Spring MVC 会自动将请求参数中的日期字符串转换为 Date 对象并传递给 submitForm 方法。

通过 @InitBinder,我们可以轻松地为特定的请求参数设置自定义的转换逻辑,确保数据绑定过程中的灵活性和可扩展性。

[SpringBoot - @InitBinder注解详解-CSDN博客](

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

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

相关文章

5万字长文吃透快手大数据面试题及参考答案(持续更新)

目录 Flink为什么用aggregate()不用process() 为什么使用aggregate() 为什么不用process() 自定义UDF, UDTF实现步骤,有哪些方法?UDTF中的ObjectInspector了解吗? 自定义UDF实现步骤 自定义UDTF实现步骤 UDTF中的ObjectInspector Spark Streaming和Flink的区别 Flu…

后端返回列表中包含图片id,如何将列表中的图片id转化成url

问题描述 如果我有一个列表数据,列表中每个对象都包含一个图片id,现在我需要将列表中的图片id转化成图片,然后再页面上显示出来 如果你有一个列表数据,列表中每个对象都包含一个图片 ID,并且你想将这些图片 ID 转化为…

鸿蒙OpenHarmony Native API【结构体】 头文件

OH_Drawing_BitmapFormat Overview Related Modules: [Drawing] Description: 结构体用于描述位图像素的格式,包括颜色类型和透明度类型 Since: 8 Version: 1.0 Summary Public Attributes Public Attribute NameDescriptioncolorFormatalphaFormat De…

在Spring Boot中实现异步处理与并发控制

在Spring Boot中实现异步处理与并发控制 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨如何在Spring Boot中实现异步处理与并发控制。这一过程涉及到异步任务的执行、…

QT:控件样式设置误区

当我设置不同控件格式样式,原先的代码如下 //设置MainWindow的背景R颜色this->setStyleSheet("QMainWindow{background-color:#F5F8FD;}");//设置菜单栏字体和背景颜色this->setStyleSheet("QMenuBar{color:#FFFFFF;background-color:#2A579A;…

PlantUML学习笔记-嵌入式系统设计常用图例

在嵌入式系统设计过程中,需要使用一些图例对系统框架及业务流程进行说明,以便于多人协同开发及后期的系统维护,提高团队开发效率。 1. 嵌入式设计开发常使用的图例: 1.1 用例图(Use Case Diagram) 用例图…

KamaCoder 99. 岛屿数量 + Leetcode 200. Number of Islands

99. 岛屿数量 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输…

【LeetCode】栈 - 20.有效的括号、150.逆波兰表达式求值、155.最小栈、栈的压入、弹出序列

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构 📚本系列文章为个人学…

【前端/js】使用js读取本地文件(xml、二进制)内容

目录 说在前面FileReaderDOMParser文本文件二进制文件 说在前面 浏览器版本:Microsoft Edge 126.0.2 (正式版本) (64 位) FileReader MDNFileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容&#x…

分布式光伏并网AM5SE-IS防孤岛保护装置介绍——安科瑞 叶西平

产品简介 功能: AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。当发生孤岛现象时,可以快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全。 应用…

模拟实现c++中的vector模版

目录 一vector简述: 二vector的一些接口函数: 1初始化: 2.vector增长: 3vector增删查改: 三vector模拟实现部分主要函数: 1.size,capacity,empty,clear接口: 2.reverse的实现&#xff1…

Golang | Leetcode Golang题解之第292题Nim游戏

题目: 题解: func canWinNim(n int) bool {return n%4 ! 0 }

【一图学技术】SDK和API有什么关系?

API(应用程序编程接口): API是一组定义了软件组件之间交互的规则和协议。 它定义了如何请求某个功能或服务,并指定了数据的格式和传输方式。API 可以用于不同的编程语言和平台。 API提供了一种标准化的方式,使不同的应…

[译] 深入浅出Rust基金会

本篇是对 RustConf 2023中的Rust Foundation: Demystified这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 大家好,我是Sage Griffin,我的代词是they/them。我今天来这里是要谈谈Rust基金会。 要了解基金会实际做什么,我们需要理解美国国内税收…

6.3 面向对象技术-设计模式

设计模式 创建型模式 结构型模式

深度学习的矩阵计算

切片slice 在NumPy中,切片(slicing)是一种选择数组元素子集的方法。切片操作基于索引,但允许你指定一个范围的索引,而不是单个索引。这对于处理多维数组(NumPy中的ndarray对象)特别有用。 一维数…

布尔盲注——多种方式实现及利用burpsuite爆破

目录 1、判断闭合符类型 2、爆数据库长度 3、查询库名 手动注入 burpsuite爆破 方法一:用ASCII码值转化爆破 方法二:left方法直接爆破字母 方法三:if方法爆破注入(最简单) 4、爆破表名 5、爆破具体值 当我们改变前端…

Java | Leetcode Java题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; class Solution {public int numSquares(int n) {if (isPerfectSquare(n)) {return 1;}if (checkAnswer4(n)) {return 4;}for (int i 1; i * i < n; i) {int j n - i * i;if (isPerfectSquare(j)) {return 2;}}return 3;}// 判断是否为…

夜不能寐?解锁失眠自救秘籍,让你重拾安睡之夜!

在这个快节奏的时代&#xff0c;失眠似乎成了许多人的“隐形伴侣”&#xff0c;悄悄侵蚀着我们的健康与幸福感。夜深人静&#xff0c;万籁俱寂之时&#xff0c;你却辗转反侧&#xff0c;难以入眠&#xff0c;第二天又拖着疲惫的身躯迎接新的挑战。别担心&#xff0c;今天我们就…

大脑自组织神经网络通俗讲解

大脑自组织神经网络的核心概念 大脑自组织神经网络&#xff0c;是指大脑中的神经元通过自组织的方式形成复杂的网络结构&#xff0c;从而实现信息的处理和存储。这一过程涉及到神经元的生长、连接和重塑&#xff0c;是大脑学习和记忆的基础。其核心公式涉及神经网络的权重更新…