Spring 数据绑定

【Spring】— Spring MVC简单数据绑定(一) 在执行程序时,Spring MVC根据客户端请求参数的不同将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立连接的过程就是Spring MVC中的数据绑定。在数据绑定过程中,Spring MVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参,这样后台方法就可以正确绑定并获取客户端请求携带的参数。具体的信息处理过程的步骤如下。 阅读详情

Spring 数据绑定(Data Binding)的作用是将用户的输入动态绑定到 JavaBean。换句话说,Spring 数据绑定机制是将属性值设置到目标对象中。

在 Spring 中,数据绑定功能主要由 DataBinder 类实现。此外,BeanWrapper 也具有类似的功能,但 DataBinder 额外支持字段验证、字段格式化和绑定结果分析。

快速入门

定义一个用于测试的 JavaBean

public class TestBean {

    private int num;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "TestBean{" + "num=" + num + '}';
    }

}

数据绑定示例

public class DataBindingDemo {

    public static void main(String[] args) {

        MutablePropertyValues mpv = new MutablePropertyValues();
        mpv.add("num", "10");

        TestBean testBean = new TestBean();
        DataBinder db = new DataBinder(testBean);

        db.bind(mpv);
        System.out.println(testBean);
    }

}

Spring 数据绑定使用场景

  • Spring BeanDefinition 到 Bean 实例创建
  • Spring 数据绑定(DataBinder)
  • Spring Web 参数绑定(WebDataBinder)

DataBinder

在 Spring 中,DataBinder 类是数据绑定功能的基类。WebDataBinder 是 DataBinder 的子类,主要用于 Spring Web 数据绑定,此外,还有一些 WebDataBinder 的扩展子类,其类族如下图所示:

DataBinder 核心属性:

属性说明
target关联目标 Bean
objectName目标 Bean 名称
bindingResult属性绑定结果
typeConverter类型转换器
conversionService类型转换服务
messageCodesResolver校验错误文案 Code 处理器
validators关联的 Bean Validator 实例集合

DataBinder 类的核心方法是 bind(PropertyValues):将 PropertyValues Key-Value 内容映射到关联 Bean(target)中的属性上

  • 假设 PropertyValues 中包含 name=dunwu 的键值对时, 同时 Bean 对象 User 中存在 name 属性, 当 bind 方法执行时, User 对象中的 name 属性值将被绑定为 dunwu

Spring 数据绑定元数据

DataBinder 元数据 - PropertyValues

特征说明
数据来源BeanDefinition,主要来源 XML 资源配置 BeanDefinition
数据结构由一个或多个 PropertyValue 组成
成员结构PropertyValue 包含属性名称,以及属性值(包括原始值、类型转换后的值)
常见实现MutablePropertyValues
Web 扩展实现ServletConfigPropertyValues、ServletRequestParameterPropertyValues
相关生命周期InstantiationAwareBeanPostProcessor#postProcessProperties

Spring 数据绑定控制参数

DataBinder 绑定特殊场景分析

  • 当 PropertyValues 中包含名称 x 的 PropertyValue,目标对象 B 不存在 x 属性,当 bind 方法执
    行时,会发生什么?
  • 当 PropertyValues 中包含名称 x 的 PropertyValue,目标对象 B 中存在 x 属性,当 bind 方法执
    行时,如何避免 B 属性 x 不被绑定?
  • 当 PropertyValues 中包含名称 x.y 的 PropertyValue,目标对象 B 中存在 x 属性(嵌套 y 属性)
    ,当 bind 方法执行时,会发生什么?

DataBinder 绑定控制参数

参数名称说明
ignoreUnknownFields是否忽略未知字段,默认值:true
ignoreInvalidFields是否忽略非法字段,默认值:false
autoGrowNestedPaths是否自动增加嵌套路径,默认值:true
allowedFields绑定字段白名单
disallowedFields绑定字段黑名单
requiredFields必须绑定字段

BeanWrapper 的使用场景

  • Spring 底层 JavaBeans 基础设施的中心化接口
  • 通常不会直接使用,间接用于 BeanFactory 和 DataBinder
  • 提供标准 JavaBeans 分析和操作,能够单独或批量存储 Java Bean 的属性(properties)
  • 支持嵌套属性路径(nested path)
  • 实现类 org.springframework.beans.BeanWrapperImpl

Spring 底层 Java Beans 替换实现

JavaBeans 核心实现 - java.beans.BeanInfo

  • 属性(Property)
    • java.beans.PropertyEditor
  • 方法(Method)
  • 事件(Event)
  • 表达式(Expression)

Spring 替代实现 - org.springframework.beans.BeanWrapper

  • 属性(Property)
    • java.beans.PropertyEditor
  • 嵌套属性路径(nested path)

DataBinder 数据校验

DataBinder 与 BeanWrapper

  • bind 方法生成 BeanPropertyBindingResult
  • BeanPropertyBindingResult 关联 BeanWrapper

问题

标准 JavaBeans 是如何操作属性的?

API说明
java.beans.IntrospectorJava Beans 内省 API
java.beans.BeanInfoJava Bean 元信息 API
java.beans.BeanDescriptorJava Bean 信息描述符
java.beans.PropertyDescriptorJava Bean 属性描述符
java.beans.MethodDescriptorJava Bean 方法描述符
java.beans.EventSetDescriptorJava Bean 事件集合描述符

参考资料

Spring MVC:数据绑定 Spring MVC数据绑定介绍 阅读详情

相关推荐

SpringMVC之DataBinding和Validation--Validator,PropertyEditor,Converter,Formatter

NULL 博文链接:https://b-l-east.iteye.com/blog/1705872

Spring数据绑定之DataBinder篇---01

数据绑定对于一个成熟的Web框架而言十分的重要,通过将Http中的请求参数或者请求体中的Json字符串绑定到对应实体对象上,可以大大提高开发人员的效率。传统Servelt编程中,仅仅是将Http数据报文中的相关请求参数封装到了Request对象中,这样做的好处是给了开发人员足够的自由性,可以自由取出相关参数进行操作。坏处是增加了重复编码劳作,例如重复的数据绑定工作和数据校验工作。一般在请求参数比较多的情况下,会采用一个专门的Model对象来封装这些请求参数,因此,这也是为什么需要数据绑定的原因。......

m0_53157173的博客 2782

R语言maftools包实战:5分钟搞定TCGA癌症突变数据可视化(附完整代码)

本文详细介绍了如何使用R语言的maftools包快速解析和可视化TCGA癌症突变数据。通过实战演示,从环境搭建、数据导入到核心可视化(如瀑布图、棒棒糖图)和深度统计分析(如生存分析、突变特征),帮助生物信息学研究者高效完成癌症基因组学分析,大幅提升从原始MAF数据到发表级图表的效率。

weixin_29054399的博客 187

Spring 类型转换、数值绑定与验证(一)— DataBinder

DataBinder 是Spring用于数据绑定、类型转换及验证的类。使用场景有:1)xml配置文件定义bean,Spring 内部使用DataBinder 来完成属性的绑定;2)Web请求参数绑定,在Spring MVC 中,Controller的方法参数通常会自动绑定到请求参数中,主要用DataBinder来完成。3)自定义数据绑定,可手动创建DataBinder 对象,为其设置校验器和转换器,来满足特定需求。

KEEP CODING 1856

群晖NAS实战:Python项目部署全流程解析

本文详细解析了在群晖NAS上部署Python项目的完整流程。从开启SSH、选择连接工具,到通过套件中心一键安装Python3、配置pip及国内镜像源,再到上传项目、安装依赖、后台运行及排错,提供了清晰的避坑指南。旨在帮助用户将群晖NAS从存储设备转变为可执行自定义任务的智能服务器,实现自动化脚本、数据监控等应用。

weixin_29057163的博客 592

Arduino-Pico:用Arduino生态开发树莓派RP2040双核与PIO实战

在嵌入式开发领域,微控制器编程是连接硬件与软件的核心技能。其原理在于通过编写代码直接控制处理器与外设,实现特定功能。掌握这项技术能极大提升开发效率,降低硬件操作门槛,广泛应用于物联网、智能硬件和自动化控制等场景。本文聚焦于如何利用Arduino这一广受欢迎的生态,来开发树莓派RP2040微控制器。RP2040以其双核Cortex-M0+架构和独特的可编程IO(PIO)硬件而著称,性能强大。通过第三方Arduino核心(arduino-pico),开发者可以沿用熟悉的Arduino语法和库,快速调用双核并行处

weixin_26905423的博客 381

Spring数据绑定详解,Spring-Data Binding源码分析

Spring BeanDefinition 到 Bean 实例创建,Bean在实例化的过程中涉及数据绑定(注解方式不需要)Spring 数据绑定(DataBinder)Spring Web 参数绑定(WebDataBinder)(包含SpringMVC、SpringWebFlux)

秃了也弱了 1580

Matlab Robotics Toolbox实战:四自由度机械臂建模与仿真全流程(附代码)

本文详细介绍了使用Matlab Robotics Toolbox进行四自由度机械臂建模与仿真的全流程,包括DH参数定义、模型构建、可视化、运动学仿真及交互控制。通过实战案例和代码示例,帮助读者快速掌握机械臂建模技巧,提升机器人学习效率。

weixin_42538752的博客 415

Spring 验证(Validation)、数据绑定(Data Binding)和类型转换(Type Conversion)

在Web层,应用程序还可以根据DataBinder为每个控制器注册控制器本地的Spring Validator实例,如在配置DataBinder中所述,这对于插入自定义验证逻辑非常有用。Spring的类型转换机制可以帮助开发者处理请求参数的解析和转换,以适应目标方法或模型对象的需求。通过在模型对象的属性上添加合适的验证注解(如@NotNull、@Size等),可以在处理请求参数或表单数据时进行验证。考虑到这些问题,Spring提供了一个验证器接口(Validator),基本且易于在应用程序的每个层中使用。

郭小喜的博客 670

ENVI新手避坑指南:手把手教你搞定遥感影像的坐标系转换(附ArcGIS对比)

本文详细解析ENVI与ArcGIS在遥感影像坐标系转换中的关键差异与实战技巧,特别针对新手常见问题提供避坑指南。从基础概念到高级操作,涵盖定义投影、UTM转换等核心步骤,并对比两种软件的处理精度与效率,帮助用户高效完成遥感影像处理任务。

weixin_42531925的博客 377

手把手实现3D肺结节检测:基于Faster R-CNN的从CT处理、训练到部署的五步代码级实战与避坑指南

亲爱的同学,当你能完整实现“3D Faster R-CNN肺部结节检测系统”,你会发现医学影像AI的毕设课题充满挑战与成就感。我们围绕3D Faster R-CNN模型,从数据处理、模型搭建到实验验证,一步步带你打造一个能精准检测肺部结节的智能系统,让你的毕设既体现技术深度,又能为肺部疾病早期诊断贡献实用价值。是专为3D医学影像设计的目标检测模型,能在三维CT数据中自动定位、识别肺部结节——这一课题兼具“临床价值”和“技术挑战性”,是毕设的优质选择,能充分展现你的工程能力和科研敏感度。

LXY_LOVE36的博客 306

聊聊 Spring 核心特性中的数据绑定 (DataBinder)

Spring 的核心特性包括 IOC 容器、事件、资源管理、国际化、校验、数据绑定、类型转换、EL 表达式、AOP。其他特性可以轻易的在网络上找到很多资料,而数据绑定这个特性即便在 Spring 官网描述却也不太多。这是因为数据绑定主要应用于 Spring 内部,对于用户而言直接使用的场景并不多。如果想要深入理解 Spring 内部的运行机制,数据绑定是必须了解的一块内容。

大鹏的博客 4249

YOLOv8-Pose NCNN Android部署优化实践

本文探讨了在Android设备上高效部署YOLOv8-Pose姿态检测模型的优化实践。通过修改Pose头部导出逻辑,分离后处理到C++端实现,并替换SiLU激活函数为ReLU,显著提升了计算效率。具体步骤包括模型结构优化、ONNX导出、NCNN转换与算子融合,最终在Android端实现了30FPS的稳定推理性能。项目提供了完整的优化思路和实现方案,对移动端AI应用开发具有参考价值。

FJN110的博客 323

Spring MVC的数据绑定

数据绑定概述简单数据绑定绑定默认数据类型绑定简单数据类型绑定POJO类型当请求参数含有中文,后台处理乱码绑定包装POJO自定义数据绑定Converter接口Formatter接口复杂数据绑定绑定数组绑定集合 概述 Spring MVC会根据客户端请求参数的不同,将请求参数以一定的方式转换并绑定到控制器类的方法参数中。Spring MVC会通过数据绑定组件(DataBinder) 将这种请求参数与后台方法参数建立连接的过程就叫Spring MVC的数据绑定。绑定过程如下: 由上图可知,Spring M

weixin_44949462的博客 3699

《网络存储技术》形考实训4:为小微企业搭建基于Windows Server的文件共享与权限管理服务

本文介绍了在域环境下部署DFS分布式文件系统的完整流程。项目目标是将3台存储服务器(NS1、NS2、NS3)上的多个共享文件夹通过DFS命名空间进行统一整合,使员工可通过单一访问路径访问所有资源。实施步骤包括:1)搭建AD域环境并创建用户/组;2)将存储服务器加入域并配置共享权限;3)在域控制器安装DFS命名空间角色;4)创建基于域的命名空间(\xc.cn\共享);5)将各服务器共享文件夹映射到命名空间;6)进行客户端访问验证。通过DFS实现了物理存储位置不变情况下的逻辑统一访问,提高了文件管理的便捷性和可

深耕计算机专业知识与技术。 946

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring数据绑定

数据绑定 文章目录数据绑定2 # 学习目标 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210602140605419.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk2ODQ0Mw==,size_16,color_FFFFFF,t_70) 2 ...

weixin_45968443的博客 1278

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Spring 丨数据绑定】

Spring 的数据绑定。

爱媳妇儿爱编程 4228

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

spring中数据绑定是指什么?

在 Spring 框架中,数据绑定指的是将客户端发送的数据(如 HTTP 请求中的参数)映射或绑定到 Java 对象上的过程。这个过程大多是自动进行的,并涉及到类型转换和格式验证。数据绑定让开发者能够轻松地处理来自于表单提交、RESTful 请求等的数据,并将这些数据用于操作对象模型或者直接应用到业务逻辑中。

java永无止境! 1274

Spring中的数据绑定

Spring中的数据绑定 Author:lyore Date:2007-01-16 02:36 在用spring进行web开发过程中,经常遇到数据绑定的问题,而属性编辑器(PropertyEditor)在其中起到了举足轻重的作用。虽然spring内置了很多属性编辑器方便开发者,比如字节数组编辑器、类对象编辑器、文件对象编辑器等等,但对于实际开发中仍感到不足,这就需要自定义

robin622的专栏 589

Spring MVC中数据绑定

这里举例的是简单和相对复杂的两种数据绑定 简单的 先配置一下springmvc-config.xml(主要代码) <!-- 定义组件扫描器,指定需要扫描的包 --> <context:component-scan base-package="com.itheima.controller" /> <!-- 定义视图解析器 --> <bean id="...

hh1297240789的博客 599

Spring的自动数据绑定

数据绑定   Spring提供的数据绑定功能即自动的提取HttpServletRequest中的请求参数,然后自动的转型之后赋给对应的对象。 简单的说就是处理前端页面传输到后台的数据信息与具体Java类对象信息的绑定; 其中数据绑定工作是Spring的SimpleFormController类帮我们完成,我们只需要做的是为数据绑定提供一个目标对象,这个对象在Spring中被称为Command对象...

Ich warte auf dich的博客 657

Spring MVC数据绑定和响应 你了解多少?

数据绑定的概念 在程序运行时,Spring MVC接收到客户端的请求后,会根据客户端请求的参数和请求头等数据信息,将参数以特定的方式转换并绑定到处理器的形参中。Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑定。

冷心笑看丽美人 ~ blog 1442

Spring框架强大的数据绑定功能

可以通过注册自定义的转换器来将外部数据转换为Java对象中的类型,例如将字符串转换为日期类型。// 处理用户提交的数据 // ... return "User created successfully";} // ... }在上述示例中,initBinder方法注册了一个自定义的转换器,将字符串形式的日期数据转换为Date类型。本文详细介绍了Spring框架中的数据绑定机制。通过DataBinder对象可以将外部数据绑定到Java对象中,用于处理和验证数据。

YANYAOHUI_的博客 896

如何妙用Spring 数据绑定机制?

前言 在剖析完 「Spring Boot 统一数据格式是怎么实现的? 」文章之后,一直觉得有必要说明一下 Spring's Data Binding Mechanism 「Spring 数据绑定机制」。 默认情况下,Spring 只知道如何转换简单数据类型。比如我们提交的 int、String 或 boolean类型的请求数据,它会自动绑定到与之对应的 Java 类型。但在实际项目中,远远不够,因...

日拱一兵 1817

Spring MVC 数据绑定教程

集合绑定List/Set必须使用Map需特殊格式参数名类型匹配表单值需能转换为目标类型(如数字转Double)命名规范表单字段名与参数名/属性名严格一致乱码处理优先级推荐使用过滤器而非手动设置。

xiaoyu070321的博客 876
上一篇: Spring 类型转换
下一篇: JDK 8 新特性
优秀小白熊
博客等级 码龄3年 1155粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值