java – MapStruct:丰富映射注释以定义自定义映射器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – MapStruct:丰富映射注释以定义自定义映射器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2439字,纯文字阅读大概需要4分钟。
内容图文
![java – MapStruct:丰富映射注释以定义自定义映射器](/upload/InfoBanner/zyjiaocheng/806/3478c062efec48e7a39a2c8ff3d324fe.jpg)
这是我的上下文:我使用byteBuddy动态生成一个类,该类根据外部配置将对象转换为另一个对象.我遇到了一些问题,我想找到另一种方法,就是我发现MapStruct的方法.
所以我尝试构建简单的映射器,我想知道是否有可能自定义注释以添加转换函数.比如我想:
@Mapping(
source = "mySourceField",
sourceType = "String",
target = "myTargetField",
targetType = "Integer",
transformation = {"toInteger", "toSquare"}
),
在mapper实现上我会有类似的东西:
public TypeDest toSiteCatTag(TypeSrc obj) {
if ( obj == null ) {
return null;
}
TypeDest objDest = new TypeDest();
objDest.myTargetField = Formatter.toSquare(
Formatter.toInteger(obj.mySourceField));
return objDest;
}
如果有人可以帮助我实现这一目标,我将感激不尽,这将节省我很多时间.
提前致谢.
解决方法:
如果在运行时没有生成2种TypeDest和TypeSrc,即它们是您编译的类,那么您可以实现您想要的. MapStruct在运行时不起作用,因为它是一个Annotation Processor并生成java代码.如果存在一些问题,例如您尝试映射不存在的字段或存在模糊的映射方法,则会出现编译时错误.
它看起来像:
@Mapper
public interface MyMapper {
@Mapping(source = "mySourceField", target = "myTargetField", qualifiedByName = "myTransformation")// or you can use a custom @Qualifier annotation with qualifiedBy
TypeDest toSiteCatTag(TypeSrc obj);
@Named("myTransformation")// or your custom @Qualifier annotation
default Integer myCustomTransformation(String obj) {
return Formatter.toSquare(Formatter.toInteger(obj));
}
}
有一种方法可以在映射器中没有自定义方法的情况下执行此操作,但是您需要在某处应用toInteger然后应用toSquare转换.如果在Formatter中有一个带有签名Integer squaredString(String obj)的方法.
例如
@Qualifier
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface SquaredString {}
public class Formatter {
@SquaredString// you can also use @Named, this is just as an example
public static Integer squaredString(String obj) {
return toSquare(toInteger(obj));
}
//your other methods are here as well
}
然后你可以在mapper中执行此操作:
@Mapper(uses = { Formatter.class })
public interface MyMapper {
@Mapping(source = "mySourceField", target = "myTargetField", qualifiedBy = SquaredString.class)
TypeDest toSiteCatTag(TypeSrc obj);
}
由于使用了qualifedByName / qualified,因此上述示例仅适用于特定映射.如果你想有一种不同的方法将String转换为Integer,那么你可以在Mapper中或Mapper#中的一些类中使用签名Integer convertString(String obj)定义一个方法.然后,MapStruct将从String转换为Integer到此方法.
您可以在参考文档中找到有关使用限定符here进行映射的更多信息,有关映射方法解析的更多信息,请参见here.
内容总结
以上是互联网集市为您收集整理的java – MapStruct:丰富映射注释以定义自定义映射器全部内容,希望文章能够帮你解决java – MapStruct:丰富映射注释以定义自定义映射器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。