免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

综述:字符串到 Java 对象转换的工具库

  • 2010-09-19
  • 本文字数:1562 字

    阅读完需:约 5 分钟

Joda Time fame 的 Stephen Colebourne 关于他之前发布的一个 Java 库 Joda Convert 在他的blog 上率先发起了一场小范围的争论,这个库可以通过annotation 来进行基础对象和字符串之间的转换。为了解释清楚关于字符串转换的方方面面,下面是对字符串和对象间互相转换技术的一个综述,让我们从Joda Convert 开始。

根据Colebourne 先生的文章,Joda Convert 宣称的目标是为了简单性而牺牲完整性。它允许Java 类的作者指定任意名称的方法,实现从字符串到此类实例间的转换。比 如,Currency 类可能有个静态方法叫做“fromISOCode(code)”,以及一个实例方法“getISOCode()”。如果为这两个方法 添加来自Joda Convert 的annotation:@FromString 和@ToString,使用Currency 类的应用就可以通过类似这样的调用:“Foo bar = StringConvert.INSTANCE.convertFromString(Foo.class, str);”,来实现对象和字符串间的转换。这样的转换通常对那些必须解析来自HTTP GET 数据的Web 应用很有帮助。Colebourne 先生的这篇blog 的评论者们则提出了一些其他的可替代方案。

第一个可替代方案是Java 中内嵌的java.beans.PropertyEditor。PropertyEditor 使用JavaBeans 技术来把字符串转换成属性值。虽然PropertyEditor一般常见于像IDE 这样的可视化编辑器里面,但其实它也可以用在后台的处理上。比如 Spring3.0 之前的版本广 泛地使用了 PropertyEditor 来支持数据绑定和验证。不像 Joda Convert,PropertyEditor 可以用在很多方面,而不仅仅是把字符串转换成对象。比如,PropertyEditor 有内建的对注册 PropertyChangeListener 的支持。

J2EE 在 JSF 中也有自己内建的转换技术。JSF 中包含了用于普通类型比如 BigDecimal、Float、DateTime 等的转换器,也提供了一个接口用于自定义转换器实现。自定义实现只需要为 getAsObject 和 getAsString 方法提供代码。但是 JSF 转换器和 JSF 绑定得很紧,所以在 JSF 以外使用它们会很困难。还有一些其他第三方的替代方案实现了字符串转换技术。其中一个最近被用在 Spring 3.0 中。虽然 Spring 之前的版本使用 PropertyEditor,但 SpringSource 选择在 3.0 里面实现自己的转换方法。根据 SpringSource 所说:

当我们开始改善 Spring 3 的数据绑定系统时,我们的目标是:

  1. 提供一个无状态、强类型的类型转换 SPI 来取代 JavaBean PropertyEditor
  2. 提供一个统一的类型转换 API,用在任何需要的地方,包括 Spring 的 DataBinder 和 Expression Language
  3. 可以通过 Java 注解元数据来驱动类型转换
  4. 通过注册可感知的缺省设置,以及采用惯例优于配置的策略,来简化转换

SpringSource 并不是唯一一家提供自己的类型转换器的开源组织。一些 Apache 项目也有他们自己的类型转换器,比如 Apache Commons BeanUtils (用在 Apache Digester ),陷入停滞的 Apache Commons Convert ,甚至是 Apache Struts Apache Camel

一些框架还被设计成不仅仅能把字符串转换成对象。比如,Dozer 是一个可以把任意复杂的对象转换成其他任意复杂的对象。因为字符串就是对象,所以它可以处在 Dozer 转换的任意一方。

最后,在选择一种转换技术的时候,开发者需要记住的是,上面提到的任何一种技术都是针对自己的目标环境而优化的。比如,浏览器中发送到 HTML 表单以及接收 自 HTML 表单的字符串,就会和把同一个对象写成 XML 文档的字符串不太一样。此外,即使是在完全相同的目标环境,比如浏览器中,一些用户可能需要的是不 同的本地化字符串(比如日期“2010-31-01”或者“1/31/2010”)。最后但一样重要的是,不同的媒介会支持不同的字符串编码。比如,XML 文档可以使用UTF-8、 ISO-8859-1 或者许多其他的编码,因为它可以在第一行中指定字符串编码。而从 URL 解析得到的字符串只能是 ASCII 编码。

查看英文原文: Roundup of String to Java Object Conversion Libraries

2010-09-19 09:094247
用户头像

发布了 127 篇内容, 共 43.2 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

如何安装 微信伴侣WechatTweak for mac(微信防撤回、多开助手)

Rose

Rhinoceros 7 (犀牛7)中文直装破解版 三维建模软件

Rose

百行代码实现 Kafka 运行在 S3 之上

AutoMQ

汇聚数字智慧 构建新质未来——《CMG数字中国》融媒体节目正式上线

江湖老铁

第十二期双周精选

AutoMQ

MobPush标签推送新范式,精准触达再升级!

MobTech袤博科技

开发者 产品动态

时至今日,我们还要必须用敏捷开发吗?

敏捷开发

Scrum 敏捷开发 企业管理 代码规范 敏捷团队

【首席战略官分享】业务流程管理的演变与挑战

望繁信科技

业务流程管理 流程挖掘 流程智能 望繁信科技

四大核心能力再升级 Bonree ONE 3.0引领全域可观测进入next level

博睿数据

极限编程要完全遵守的12个实践!

敏捷开发

程序员 敏捷开发 软件开发 代码规范 极限编程

青岛等保测评公司名称是什么?在哪里?电话多少?

行云管家

等保 堡垒机 等级保护 等保测评

当 Meme 与 TON 融合,两大顶流标签会带来什么机会?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

文献解读-群体测序-第二十四期|《中国西部一个连续临床疑似儿童原发性腔毛运动障碍队列的临床和遗传特征》

INSVAST

基因测序 基因数据分析 生信服务

5家券商综合评级上升 6月券商App终端业务体验评测报告发布

博睿数据

AutoMQ 与 Timeplus 达成战略合作强强联手

AutoMQ

云计算 云原生 后端

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

AutoMQ

GOGC 2024 等你来

非凸科技

开源 技术 招聘 GOGC

上万次实践总结,原来这些才是敏捷测试要遵循的原则

敏捷开发

编程 敏捷开发 极限编程 敏捷实践 持续改进

什么是海外云手机?海外云手机有什么用?

Ogcloud

云手机 海外云手机 云手机海外版 手机群控 海外社媒营销

智谱发布 AI 生成视频模型「清影」;TikTok 推出听歌搜短视频功能丨 RTE 开发者日报

声网

LRC2022中文破解资源 Lightroom Classic 2022下载 mac/win

Rose

GPT-4o Mini深夜突发:即刻免费上线,API降价60%

蓉蓉

GPT-4o mini

专业的mac软件下载平台——macw(苹果mac破解软件、资讯教程、视频、模板、壁纸素材)

Rose

电脑风扇控制软件Macs Fan Control Pro mac破解版下载

Rose

天猫商品详情API返回值中的商品类型与分类

技术冰糖葫芦

API 文档 API 测试 API 优先 API Hub

现在有什么赛道可以干到退休?

王中阳Go

Go 面试

运维安全审计系统定义以及作用详细讲解

行云管家

软件 安全运维 运维审计 运维安全

WiFi 7 vs. WiFi 5-QCN9274 and QCA9880 technical introduction

wifi6-yiyi

wifi WiFi7

技术同学的职场生存指南

老张

职业规划 认知提升 打工人 职场发展

小程序生态如何助力企业打出差异牌?

Geek_2305a8

50万年——黑客找到你IPv6地址的时间

国科云

综述:字符串到Java对象转换的工具库_Java_Tim Cull_InfoQ精选文章