mapstruct - 我可以强制 mapstruct 将映射方法委托给另一个映射方法或默认(内置)转换吗?
问题描述
我可以强制 mapstruct 将映射方法委托给另一个映射方法或默认(内置)转换吗?
我基本上想uses
在使用 MapperX 的自定义映射方法中访问 MapperA 的自定义映射方法。但是我无法在 MapperX 的自定义映射方法中获取注入的 MapperA。
内置转换也是如此。我想在自定义方法中使用 mapstruct 的内置转换。就像从 Date 转换为 ZonedDateTime。
例如:
@Mapper(componentModel="cdi")
public interface MapperA {
A fromB(B b);
default Q fromR(R r) {
Q q = ..<do some stuff with r>..
return q;
}
}
@Mapper(componentModel="cdi"
uses = MapperA.class
)
public interface MapperX {
default X custom(Y y) {
Date someJavaUtilDate = customDateFromY(y);
//I dont want to code Date->ZonedDateTime myself
//I want mapstruct to do its builtin conversion, so call placeholder:
X.myZonedDateTime = builtinConversionPlaceholder(someJavaUtilDate)
R r = ..<do some stuff with y>..
X.q = usesMapperPlaceholder(r); // injected "uses MapperA" is not directly accessible here?
}
@org.mapstruct.Find_Me_A_Matching_Method_Builtin_Or_In_Uses_Mapper
// will not map properties of Date to ZonedDateTime
// but will use mapstruct builtin conversion code
ZonedDateTime builtinConversionPlaceholder(java.util.Date date);
@org.mapstruct.Find_Me_A_Matching_Method_Builtin_Or_In_Uses_Mapper
// will delegate to MapperA.fromR
Q usesMapperPlaceholder(R r);
}
解决方案
不,不可能强制 MapStruct 使用。内置转换方法。
您可以做的是创建一些将在java.util.Date
和之间映射的包装对象,ZonedDateTime
然后 MapStruct 将使用内置映射映射这些对象。
例如
@Mapper(componentModel="cdi")
public interface MapperA {
A fromB(B b);
default Q fromR(R r) {
Q q = ..<do some stuff with r>..
return q;
}
}
@Mapper(componentModel="cdi"
uses = MapperA.class
)
public abstract class MapperX {
@Inject
MapperA mapperA;
default X custom(Y y) {
Date someJavaUtilDate = customDateFromY(y);
X.myZonedDateTime = toZonedDateTime(someJavaUtilDate).getValue();
R r = ..<do some stuff with y>..
X.q = mapperA.fromR(r);
}
Wrapper<ZonedDateTime> toZonedDateTime(Wrapper<java.util.Date> date);
static class Wrapper<T> {
private T value;
//getters and setters
}
}
推荐阅读
- java - 从二维数组列表读取和写入数据的问题
- c# - 在 C# 程序中编译和执行 C++ 代码
- nativescript - 如何在 NativeScript 项目中使用自定义 Swift 框架?
- javascript - HTML webpack插件没有将脚本注入模板
- mysql - 如何在 Rails 上查询日文活动记录?
- flutter - “?。” Dart 或其他语言的符号
- r - 为 xts 使用错误的时间自动绘图
- python - 如何在python中删除字符串的特定部分
- plot - gnuplot 不允许绘制简单的文件说下一个大小无效
- python - 仅使用 Django 2.2 ORM