注解实现对象的属性赋值

在做一些业务时,从前台获取的数据用实体接收后,可能需要有字段转换才能存储到库中,或从库中查找的数据,会做一些转换或处理再返回给前台视图view。
有一个简单的BeanUtils.copyProperties(source, target, ignoreProperties);可实现两个对象之间属性的转换,但此种方式仅仅支持完全相同字段名和字段类型的字段赋值;另外有第三方工具dozer,使用dozer工具,这个需要xml配合或需要继承DozerConverter接口处理,也挺恼人。
对于系统中多处需要字段换值的处理,以下提供一种注解的方式。
项目代码:https://github.com/alranger/dataconverter
注解:

/**
 * 用于字段赋值的处理
 * 目前:source与target不共存,先判断source,有source则不处理target
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ConverterField {

    /**
     * 主要用于处理字段名相同,类型不同的数据
     *  字段类型(最直接的类型)
     *  example:
     *  1、 @ConverterField(target = BasicUser.class)
     *      private List<BasicUser> leaders;
     *  2、 @ConverterField(target = BriefVO.class)
     *      private BriefVO type;
     */
    Class<?> target();

    /**
     * 用于处理数据拼接,获取对象字段用"." 分割,如entity.name
     * 数据来源
     * 当注解有source时; target= Target.class 是默认空值
     * @return
     */
    String[] source() default {};

    /**
     * 数据的来源对象,目前用于source()数据处理, field的值可以来自于自身的entity
     * @return
     */
    OriginType origin() default OriginType.OPPOSITE;

}

以下用例子说明:
一、两个对象中字段名相同,类型不同的用法:
1、字符串转对象或List
源对象source:
源对象中的两个字段的,是获取的数据字典数据dict,修改的频率不多,但涉及到查询,没有用AttributeConverter去处理,而是自己处理成json串存储为string
在这里插入图片描述
目标对象target:
为了给前端提供更友好的数据,转换为实体的或List<?>,
注解的使用:
在这里插入图片描述
这里没有转化为数据字典(dict),而是使用了一个简化的entity,只返回最关注的信息,使用了一个简化的BriefVO。
在这里插入图片描述
结果:
在这里插入图片描述

2、entity之间的转换:

源对象source:
在这里插入图片描述
目标对象target:

Stage与BriefvO的属性是完全不同的,
在这里插入图片描述
结果:
在这里插入图片描述
二、字段的拼接
有时返回的数据仅仅只是其中一个对象的属性字段值,也可以通过注解的方式来实现:
源source:
在这里插入图片描述
目标target:
在这里插入图片描述
结果:
在这里插入图片描述
三、后面有时间会加上关于数字的计算和日期的计算或处理等,待续

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值