@@ Mapper接口未调用@AfterMapping

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

我在使用Mapstruct时遇到问题。

我正在使用一个@Mapper带注释的界面,其中包含@AfterMapping,如下所示:

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ConfiguracionReautorizacionMapper {

    ConfiguracionReautorizacionDTO toConfiguracionReautorizacionDTO(final ConfiguracionReautorizacion configuracionReautorizacion);

    ConfiguracionReautorizacion toConfiguracionReautorizacion(final ConfiguracionReautorizacionDTO configuracionReautorizacionDTO);

    @AfterMapping
    default void fillServiciosAsociados(@MappingTarget final ConfiguracionReautorizacionDTO configuracionReautorizacionDTO, final ConfiguracionReautorizacion configuracionReautorizacion) {
        configuracionReautorizacionDTO.setTieneRolesOServiciosAsociados(!(CollectionUtils.isEmpty(configuracionReautorizacion.getRolesAplicacionEdesk()) && CollectionUtils.isEmpty(configuracionReautorizacion.getRolesAplicacionEdesk())));
    }

}

映射器工作完美,但从未调用@AfterMapping方法。我阅读了其他文章,其中显示了使用abstract class而不是interface的示例。

使用abstract class注释是否必须使用@AfterMapping注释?

java mapstruct
1个回答
0
投票

您不能传递对象(假定该对象是不可变的)。您应该通过构建器..像这样:

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ConfiguracionReautorizacionMapper {

    ConfiguracionReautorizacionDTO toConfiguracionReautorizacionDTO(final ConfiguracionReautorizacion configuracionReautorizacion);

    ConfiguracionReautorizacion toConfiguracionReautorizacion(final ConfiguracionReautorizacionDTO configuracionReautorizacionDTO);

    @AfterMapping
    default void fillServiciosAsociados(@MappingTarget final ConfiguracionReautorizacionDTO.Builder configuracionReautorizacionDTO, final ConfiguracionReautorizacion configuracionReautorizacion) {
        configuracionReautorizacionDTO.setTieneRolesOServiciosAsociados(!(CollectionUtils.isEmpty(configuracionReautorizacion.getRolesAplicacionEdesk()) && CollectionUtils.isEmpty(configuracionReautorizacion.getRolesAplicacionEdesk())));
    }

}

[签出MapStruct issue 1556。也可以从1.3.1开始禁用构建器]

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