在Mapstruct中,如何忽略空对象和字段

问题描述 投票:0回答:1

亲爱的,

我在项目中使用mapstruct(版本:1.5.2.Final,编译器:来自gradle-language-java-7.6.1.jar的IncrementalProcessingEnvironment,环境:Java 17.0.8)。

我试图忽略空值,但它不起作用。你能帮我吗?

上图,packet为null,调用packetToPacketDTO,但在packetToPacketDTO中不为null

同样在最后一张图片上, effectiveDate 应该为 null,但它通过了 null 检查。

我想忽略空值。

我的地图绘制者:

@Mapper( nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE )
public interface PacketItemInstanceMapper{


    PacketItemInstanceMapper INSTANCE = Mappers.getMapper( PacketItemInstanceMapper.class );
    PacketItemInstanceDTO toDTO(PacketItemInstance entity);
    List<PacketItemInstanceDTO> toDTO(List<PacketItemInstance> entities);
    default PacketItemInstanceDTO getFirstDTO(List<PacketItemInstance> entities){
        if(CollectionUtils.isEmpty(entities)){
            return null;
        }
        return toDTO(entities.get(0));
    }

}
spring-boot mapping mapstruct java-17 mapper
1个回答
0
投票

这更多是一个 Hibernate 问题。您设置的

nullValuePropertyMappingStrategy
就是您要寻找的内容。

@Mapper( nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE )

但是,正如您在调试器内部看到的那样,您持有一个 Hibernate 代理 (

product = {Product$HibernateProxy$X2....}
)。 getter 将加载其后面的数据,该数据not null。您可以通过在调试器中评估
product.getEffectiveDate()
来看到这一点。

在您的情况下,您可能需要取消代理

product
,或者找到其他方法从数据库加载它。例如,请参阅 Thorben Janssen 的这篇文章

© www.soinside.com 2019 - 2024. All rights reserved.