【问题标题】:Mapstrtuct :Nested Object . Create target object only if source element is not NullMapstrtuct:嵌套对象。仅当源元素不为 Null 时才创建目标对象
【发布时间】:2018-03-10 05:52:58
【问题描述】:

我想映射嵌套的 java 对象。 Customer.address.houseNumberuserDTO.homeDTO.addressDTO.houseNo

期望:当且仅当Customer.address.houseNumber 不为空,然后在userDTO 下创建homeDTO 对象。否则不要创建任何目标对象。

问题:我在映射器中使用了"NullValueCheckStrategy.ALWAYS"。但是 mapstruct 正在检查 address 是否不为空,然后它会创建 homeDTO。在 address 内部,houseNumber 为 NULL。我想要空检查直到houseNumber(leaf/last level object),然后创建目标对象。

请告知我应该如何实现这一目标

这是我正在使用的映射。

@Mapper( nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS )
public interface Customer2UserMapper {

    @Mapping(source="address.houseNumber", target="homeDTO.addressDTO.houseNo" )
    void mapCustomerHouse(Customer customer, @MappingTarget  UserDTO userDTO)  ;

}

生成的代码在https://github.com/mapstruct/mapstruct/issues/1303

【问题讨论】:

  • 您附加的代码中有一些拼写错误(错误),例如customer.getAddress()=.getHouseNumber()
  • 谢谢安德烈。已更正。

标签: java null nested mapstruct


【解决方案1】:

这与mapstruct/mapstruct#879 中的内容类似。目前您正在寻找的东西是不可能的。

如果address.houseNumbernull,则有一个@AfterMapping 方法将其设置回null

【讨论】:

  • 谢谢菲利普。但是@AfterMapping 将是检查 src 是否为空然后将目标设置为空的额外代码。我有 1000 个要映射的元素,对于每个元素我无法进行此检查。
  • 我知道这将是提取代码,但目前这是解决您遇到的问题的唯一方法。这就是我将您链接到该问题的原因,您可以在其中发表评论和投票。
  • 在将近 2.5 年之后是否有任何更新?提前致谢。
猜你喜欢
  • 2023-02-20
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多