我如何使用 mapStruct 递归地将 Long 转换为 LocalDateTime?
How can i recursivelry convert Long to LocalDateTime with mapStruct?
我尝试将一个复杂对象转换为另一个复杂对象。所有对象都有子对象。
在这些对象中,我有不同格式的日期...
看看那个:
ObjectA : {
Long dateA,
CustomObject: {
Long dateB
List<CustomObject2> myObject
}
}
CustomObject2 : {
Long dateC
}
然后是我的目标对象:
ObjectB : {
LocalDateTime dateA,
CustomObject: {
LocalDateTime dateB
List<CustomObject3> myObject
}
}
CustomObject3 : {
LocalDateTime dateC
}
我已经编写了 mapstruct 转换器来将 ObjectA
转换为 ObjectB
:
@Mapping( target = "dateA", qualifiedByName = "toLocalDateTime")
ObjectB convertROToBO(ObjectA in);
@Named("toLocalDateTime")
static LocalDateTime toLocalDate(final Long dateMilliseconds) {
if (dateMilliseconds == null) {
return null;
}
return Instant.ofEpochMilli(dateMilliseconds).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
所以,当我将我的 ObjectA
转换为 ObjectB
时,只有我的 dateA
被转换(我的 dateB
@ dateC
没有被转换)。
*** 我如何使用映射结构递归地将我所有的 Long 转换为 LocalDateTime?是否可以使用单个转换器和单个转换方法来做到这一点? ***
谢谢:)
你的 toLocalDate
没有被递归提取的原因是因为你正在使用 @Named
,当你限定你的方法时,它们只能与 qualifiedByName
和 qualifiedBy
.
如果您从 toLocalDate
中删除 @Named
,则 Long
和 LocalDateTime
之间的所有映射都将使用该方法。
我尝试将一个复杂对象转换为另一个复杂对象。所有对象都有子对象。 在这些对象中,我有不同格式的日期...
看看那个:
ObjectA : {
Long dateA,
CustomObject: {
Long dateB
List<CustomObject2> myObject
}
}
CustomObject2 : {
Long dateC
}
然后是我的目标对象:
ObjectB : {
LocalDateTime dateA,
CustomObject: {
LocalDateTime dateB
List<CustomObject3> myObject
}
}
CustomObject3 : {
LocalDateTime dateC
}
我已经编写了 mapstruct 转换器来将 ObjectA
转换为 ObjectB
:
@Mapping( target = "dateA", qualifiedByName = "toLocalDateTime")
ObjectB convertROToBO(ObjectA in);
@Named("toLocalDateTime")
static LocalDateTime toLocalDate(final Long dateMilliseconds) {
if (dateMilliseconds == null) {
return null;
}
return Instant.ofEpochMilli(dateMilliseconds).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
所以,当我将我的 ObjectA
转换为 ObjectB
时,只有我的 dateA
被转换(我的 dateB
@ dateC
没有被转换)。
*** 我如何使用映射结构递归地将我所有的 Long 转换为 LocalDateTime?是否可以使用单个转换器和单个转换方法来做到这一点? ***
谢谢:)
你的 toLocalDate
没有被递归提取的原因是因为你正在使用 @Named
,当你限定你的方法时,它们只能与 qualifiedByName
和 qualifiedBy
.
如果您从 toLocalDate
中删除 @Named
,则 Long
和 LocalDateTime
之间的所有映射都将使用该方法。