如何使用mapstruct递归地将long转换为localdatetime?

a1o7rhls  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(1242)

我试着把一个复杂的物体转换成另一个复杂的物体。所有对象都有子对象。在这些对象中,我有不同格式的日期。。。
看看这个:

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转换器来转换 ObjectAObjectB :

@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();

}

所以,当我转换我的 ObjectAObjectB ,只有我的 dateA 已转换(我的 dateB @ dateC 不转换)。

如何使用map struct递归地将所有long转换为localdatetime?有没有可能用单转换器和单转换方法来实现这一点

谢谢:)

2vuwiymt

2vuwiymt1#

你为什么 toLocalDate 是因为您正在使用 @Named ,当您限定您的方法时,它们只能与 qualifiedByName 以及 qualifiedBy .
如果你移除 @NamedtoLocalDate 然后是 Long 以及 LocalDateTime 我会用那种方法。

相关问题