我正在使用MapStruct从一个JPA实体映射到一个POJO DTO,在一个带有依赖项注入的Spring应用程序中。
@Override
public Set<DimensionItemTreeDTO> missionSetToTreeDtoSet(Set<Mission> set) {
return delegate.missionSetToTreeDtoSet( set );
}
@Override
public Set<DimensionItemTreeDTO> missionSetToTreeDtoSet(Set<Mission> set) {
if ( set == null ) {
return null;
}
Set<DimensionItemTreeDTO> set__ = new HashSet<DimensionItemTreeDTO>();
for ( Mission mission : set ) {
set__.add( missionToTreeDto( mission ) ); //here the decorator is not called !
}
return set__;
}
...并且从不为集合中的项调用修饰方法。
有没有一种方法可以让Mapstruct在集合映射中使用decorator方法,而不是在我的decorator中手动编写集合方法(这种方法很有效,但很冗长,并且违背了Mapstruct最初的目的,即不必编写这种代码)?
我找到了问题的解决方案:实际上,我的用例更适合MapStruct@AfterMapping方法,我使用了它,现在它对所有情况都很好地工作:
@Mapper
public abstract class ConstraintsPostProcessor {
@Inject
private UserService userService; // can use normal Spring DI here
@AfterMapping
public void setConstraintsOnMissionTreeDTO(Mission mission, @MappingTarget MissionDTO dto){ // do not forget the @MappingTarget annotation or it will not work
dto.setUser(userService.getCurrentUser()); // can do any additional logic here, using services etc.
}
}
在主映射器中:
@Mapper(uses = {ConstraintsPostProcessor.class}) // just add the previous class here in the uses attribute
public interface DimensionMapper {
...
}
按照第二个链接中包含的示例,我已经测试了: 但我没有实现使用。
我想用Kotlin中的Mapstruct将实体映射到带有嵌套DTO的DTO。 在Java中,这是这样的:。 应该如何使用Kotlin实现它?
我可以想象这样一个解决方案:一个子映射器,在这个映射器中,我用如下所示的查找重写Dto to Domain方法: 但目标在MapStruct中是必需的。也许我可以以某种方式指定整个对象作为目标?
我目前正在用Spring componentModel设置一个MapStruct映射器,到目前为止一切都很好,各个子映射器可以按照预期进行自动注入。但是,在加载ApplicationContext时,使用修饰映射器会导致以下失败: 创建名为“Example MapperImpl”的bean时出错:通过构造函数参数0表示不满足的依赖关系;嵌套异常是org.springframework.beans.
最后,我在我的映射类中使用了这个方法: 但这返回给我。我知道我的代码有问题,但我找不到适合我需要的有用的东西。你能帮我解决这个问题吗?
我有一个mapstruct类,具有以下函数 CustomApplication和常规应用程序都扩展了App,因此我有根据isCustom字段调用转换器的main Converter。 问题是,当我尝试构建这个时,我得到了一个模糊的映射错误,因为main Converter、ConvertNorarApplication和ConvertCustomApplication都从Application D