我如何使用 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,当你限定你的方法时,它们只能与 qualifiedByNamequalifiedBy.

如果您从 toLocalDate 中删除 @Named,则 LongLocalDateTime 之间的所有映射都将使用该方法。