Spring 中的各种 Editor,其实都是java.beans包中PropertyEditor的实现类

java Bean规范中有这样一个接口,PropertyEditor,从这个接口的名字来看,是用来进行编辑属性的,那自然是编辑对象的属性。

        1.为什么需要属性编辑器呢

        我们通常会在类型定义各种类型的属性,通常我们自己通过new创建对象,并且设置属性的时候,我们知道每个字段是什么类型,我们就会设置一个对应类型的值给指定的字段。但是有的时候我们需要将一个字符串,转换为某个字段的类型,因为有些类型,如果是从字符串转换为该类型,比较复杂,所以我们就需要一个工具类来抽取转换的代码,将字符串转换为指定的类型。所以java.beans中定义了PropertyEditor,该接口中定义的void setAsText(String text) 就是将传入的字符串text转换为指定类型的对象,为了方便使用,java为这个接口定义了一个默认的实现类PropertyEditorSupport类,它帮助我们实现了所有的方法,我们只需要继承它就可以使用了。在PropertyEditorSupport定义了一个value的字段,setAsText()中 将字符串转化为指定类型的对象以后,通过setValue() 把该对象赋值给 value字段,这样我们就可以通过getValue()方法获取到我们想要的对象

        2.属性编辑器能完成什么样的功能

        (1) 一个PropertyEditor的实现类,可以帮我们完成把一个字符串转换为一个我们想要的对象

        (2)该类还定义了一个 String getAsText() ,主要就是返回一个能代表指定类型的对象,并且我们看得懂的字符串

        3.在Spring中我们有大量的这种场景,比如我们在一个类中定义了一个URL类型的字段,但是我们在xml文件中通过Property标签配置该字段是只能配置字符串类型,所以就需要一个PropertyEditor 将我们配置的 字符串转换为 URL类型的对象。比如在SpringMvc中,我们定义的接收参数的Model中可能有各种各样类型的字段,有时候还可能定义一个数组类型的字段,但是前端传过来的参数都是字符串,所以就需要有对应的PropertyEditor将字符串转换为想要的类型的对象

我们自定义一个PropertyEditor来测试一下

public class PersonEditor extends PropertyEditorSupport {@Overridepublic void setAsText(String text) throws IllegalArgumentException {String[] split = text.split("#");Person person = new Person();person.setName(split[0]);person.setAge(Integer.parseInt(split[1]));this.setValue(person);}@Overridepublic String getAsText() {return ((Person)this.getValue()).getName() + "#" + ((Person)this.getValue()).getAge();}public static void main(String[] args) {PersonEditor personEditor = new PersonEditor();personEditor.setAsText("孙悟空#30");System.out.println(personEditor.getValue());System.out.println(personEditor.getAsText());}
}运行结果:
Person{name='孙悟空', age=30}
孙悟空#30

可以看到我们成功将字符串  孙悟空#30  转换为一个Person对象,这样如果我们在接收参数的Model中定义了Person类型的字段,前端传了 孙悟空#30 ,我们就可以用PersonEditor来将

孙悟空#30  转换为一个Person对象

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CSP/信奥赛C++刷题训练:经典深搜例题(1):洛谷1605 :迷宫

CSP/信奥赛C刷题训练:经典深搜例题(1):洛谷1605 :迷宫 题目描述 给定一个 N M N \times M NM 方格的迷宫,迷宫里有 T T T 处障碍,障碍处不可通过。 在迷宫中移动有上下左右四种方式&#x…

yolov8涨点系列之Concat模块改进

文章目录 Concat模块修改步骤(1) BiFPN_Concat3模块编辑(2)在__init_.pyconv.py中声明(3)在task.py中声明yolov8引入BiFPN_Concat3模块yolov8.yamlyolov8.yaml引入C2f_up模块 在YOLOv8中, concat模块主要用于将多个特征图连接在一起。其具体…

越权访问漏洞

V2Board Admin.php 越权访问漏洞 ## 漏洞描述 V2board面板 Admin.php 存在越权访问漏洞,由于部分鉴权代码于v1.6.1版本进行了修改,鉴权方式变为从Redis中获取缓存判定是否存在可以调用… V2Board Admin.php 越权访问漏洞 漏洞描述 V2board面板 Admin.ph…

安装和运行开发微信小程序

下载HBuilder uniapp官网 uni-app官网 微信开发者工具 安装 微信小程序 微信小程序 官网 微信小程序 配置 运行 注意:运行前需要开启服务端口 如果运行看不到效果,设置下基础库选别的版本 配置

小檗碱和卤代苄基异喹啉生物碱的代谢工程合成-文献精读79

De novo biosynthesis of berberine and halogenated benzylisoquinoline alkaloids in Saccharomyces cerevisiae 在 酿酒酵母(Saccharomyces cerevisiae)中从头合成小檗碱和卤代苄基异喹啉生物碱 小檗碱的酵母代谢工程生物合成-文献精读78 苄基异喹…

鸿蒙开发案例:七巧板

【1】引言(完整代码在最后面) 本文介绍的拖动七巧板游戏是一个简单的益智游戏,用户可以通过拖动和旋转不同形状的七巧板块来完成拼图任务。整个游戏使用鸿蒙Next框架开发,利用其强大的UI构建能力和数据响应机制,实现了…

【TS】九天学会TS语法——1.TypeScript 是什么

今天学习的是TypeScript 基础,目标是了解 TypeScript 的基本概念,安装 TypeScript,编写第一个 TypeScript 程序。 TypeScript 简介安装 TypeScriptTypeScript 编译过程编写第一个 TypeScript 程序 随着前端开发的不断发展,TypeScr…

Docker学习—Docker的安装与使用

Docker安装 1.卸载旧版 首先如果系统中已经存在旧的Docker,则先卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2.配置Docker的yum库 首先…

69.ov5640摄像头HDMI灰度显示

(1)理论学习 灰度像素:在 RGB 颜色模型下,图像中每个像素颜色的 R、G、B 三种基色的分量值相等的像素。由灰度像素组成的灰度图像只能表现256中颜色(或亮度),通常把灰度图像中像素的亮度称为灰…

Star Tower:开启数据存储新纪元

在科技飞速发展的当今时代,数据如同璀璨的星辰,闪耀着无尽的价值。而数据存储系统,则是承载这些星辰的浩瀚宇宙。Star Tower 以其卓越的性能和创新的理念,开启了数据存储的新纪元。 Star Tower 的分布式存储架构,是一…

基于SSM的企业管理系统(源码+lw+调试+技术指导)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

鸿蒙应用App测试-通用测试

注意:大家记得学完通用测试记得再学鸿蒙专项测试 鸿蒙应用App测试-专项测试(DevEco Testing)-CSDN博客 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得…

掌握Qt调试技术

文章目录 前言一、Qt调试的基本概念二、Qt调试工具三、Qt调试实践四、Q调试技巧五、总结前言 在软件开发中,调试是一个至关重要的环节。Qt作为一个广泛使用的跨平台C++图形用户界面应用程序开发框架,其调试技术也显得尤为重要。本文将深入探讨Qt调试技术,帮助读者更好地掌握…

Qt中时间戳转化为时间

QT中时间和时间戳互相转化_currentsecssinceepoch-CSDN博客 qDebug()<<QDateTime::currentMSecsSinceEpoch(); 1730838034770 时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu) [static] qint64 QDateTime::currentMSecsSinceEpoch() Returns the number of milli…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日&#xff0c;由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 在苏州站活动开场&#xff0c;达索系统专业客户事业部华东区渠道经理马腾飞…

ArcGIS006:ArcMap常用操作151-200例动图演示

摘要&#xff1a;本文介绍了ArcMap邻域分析、栅格表面分析、水文分析、区域分析、提取分析等工具箱中的工具功能。包括计算图层间点、线、面要素间的距离、位置和角度&#xff0c;创建缓冲区&#xff0c;添加计算信息到属性表&#xff0c;分割面要素&#xff0c;编号&#xff0…

关于马达驱动芯片AT6237的开发指南(兼容DRV8837)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 逻辑功能

利用AI提升SEO效果的关键词策略

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐步成为提升搜索引擎优化&#xff08;SEO&#xff09;效果的重要工具。SEO的核心在于关键词的选择与运用&#xff0c;而AI技术则为我们提供了一种智能化的分析和优化方案。通过对大量数据进行挖掘…

了解数据库设计中的反规范化

反规范化是指通过增加冗余数据来提高数据库的读取效率。也就是说,反规范化通过在表中增加冗余字段来减少数据库中的表连接,以提高查询速度。规范化和反规范化是关系型数据库设计中的两个重要方面,它们分别代表了数据组织方式上的两个不同方向。规范化是为了减少数据冗余和提…

【系统集成项目管理工程师教程】第10章 启动过程组

启动过程组包含制定项目章程和识别干系人两个过程&#xff0c;是项目的起始阶段&#xff0c;旨在协调各方期望&#xff0c;明确项目范围、目标与干系人&#xff0c;确保项目符合组织战略&#xff0c;为项目成功奠定基础&#xff0c;在项目管理中起着至关重要的引领作用。 10.…