首页 > 科技 > java注解实现对象的属性赋值,从此少写代码,快乐生活

java注解实现对象的属性赋值,从此少写代码,快乐生活

各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题

我们平时在做一些业务时,从前台获取的数据用实体接收后,可能需要有字段转换才能存储到库中,或从库中查找的数据,会做一些转换或处理再返回给前台视图view。

有一个简单的BeanUtils.copyProperties(source, target, ignoreProperties);可实现两个对象之间属性的转换,但此种方式仅仅支持完全相同字段名和字段类型的字段赋值;另外有第三方工具dozer,使用dozer工具,这个需要xml配合或需要继承DozerConverter接口处理,也挺恼人。

对于系统中多处需要字段换值的处理,以下提供一种注解的方式。

项目代码:https://github.com/alranger/dataconverter

另外SOA代码:https://github.com/genie-arct/soa

注解:

/**

* 用于字段赋值的处理

* 目前:source与target不共存,先判断source,有source则不处理target

*/

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.FIELD)

public @interface ConverterField {

/**

* 主要用于处理字段名相同,类型不同的数据

* 字段类型(最直接的类型)

* example:

* 1、 @ConverterField(target = BasicUser.class)

* private List 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:

结果:

三、后面有时间会加上关于数字的计算和日期的计算或处理等,待续

下一篇预告:消息队列中间件如何选型的话题

java高并发、高级面试、分布式、微服务、人工智能以及Python等各大互联网专题,关注wx公众号【架构师修炼】专属视频资料点击菜单“成神之路” 你会感谢我的

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/210491.html