我在使用Mapstruct时遇到问题。
我在内部使用@Mapper
的{{1}}批注界面,如下所示:
@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
?
答案 0 :(得分: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开始禁用构建器
答案 1 :(得分:0)
当您同时使用 Lombok builder 和 mapstruct 时。尽管您传递了 Builder 对象,但 @AfterMapping 并没有多大用处,因为我们无法检索处理后的值。相反,我在映射器中使用了自定义方法来解决此问题。
@Mapping(target ="field", expression = "java(customMethod(obj))")
这解决了我的用例,希望它也能帮助其他人。