idea对象转换插件ObjectConverter

本文介绍了在业务项目开发中对象转换的常见挑战,作者研发的ObjectConverterIDEA插件能自动生成getset代码,减轻手动转换的工作量。该插件支持部分功能,如字段相识度比较,但暂不支持List、Set等嵌套类型和泛型类的处理,后续将进行升级并开源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

业务项目开发过程中,存在大量对象转换的地方,比如VO、DTO、Domain领域对象、PO、Request、Response等对象转换。当前转换的方式一般包括:

  1. 手写各个对象getset转换

  2. 利用MapSturct 注解,在编译后生成getset代码,可通过反编译class文件看到生成后代码

  3. 利用BeanUtils.copyProperties等运行时反射getset值

  4. BeanCopier等运行时操作字节码生成代码

第1个方式体力活比较耗时耗力。第2个是相对推荐的方式,性能好,但对象比较复杂时,需额外配置注解或仍需手工getset。第3,4等方式相对比较耗时,不太推荐大量使用。

基于现状,我研发了一个idea插件:ObjectConverter, 可以在研发阶段生成对象转换的getset代码,研发人员可根据生成后的代码微调后使用。

ObjectConverter

整体逻辑:

  • 安装插件后,插件弹出框,用户输入Source Class和Target Class,如果是当前类文件右键生成的,默认会把当前类路径作为Target Class的值。弹出插件的方式:

    • 文件右键Generte..或alt+ insert后,弹框中选择Object Converter,弹框中Source Class和Target Class分别填写转换的原始类和目标类。注意类需要包括包路径

    • idea工具栏的Tools下,选择Object Converter,弹框中Source Class和Target Class分别填写转换的原始类和目标类。注意类需要包括包路径。

  • 弹框确认后,生成Source Class和Target Class类的所有字段(包括嵌套对象)信息,Target Class的每个字段(包括字段类型是嵌套的其他类型)和Souce Class的所有字段做字段的相识度比较,获取相识度最大的字段作为该Target Class的字段set值。

    • 字段相识度如果低于70%,生成的set代码上面会增加注释:FIXME:Low matching rate, match ratio。

  • 生成的代码会生成一个java类文件,放到Target Class类的同级包路径下。文件命名:Target Class+Converter.java

    • 如果存在同名的java类文件,会提醒已存在不会覆盖已有文件

当前插件为版本1,不支持的功能:

  • Collection下List、Set、Queue等类型的嵌套解析;

  • 泛型类的处理;

  • 转换对象不一致是字段级别的类型处理。

后面空了会升级代码后放到github,以及上传官方插件库。当前插件如附件,使用过程如有疑问或建议可讨论。

下面是插件使用过程的示例:

附录

插件提供对象转换能力,解决手工编写大量转换对象代码的耗时耗力问题,作为辅助工具,生成后的代码需根据情况做微调后使用。使用过程有疑问欢迎探讨。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值