spring 在Intellij中使用Sping Boot 3测试MapStruct

5f0d552i  于 2023-06-21  发布在  Spring
关注(0)|答案(1)|浏览(188)

以前在其他版本的Sping Boot 中也有人问过这个问题,但我找不到Spring 3的解决方案。
我正在测试一个使用mapstruct在IntelliJ中返回DTO的控制器。我创建了一个类来扫描我的实体包,但它不起作用:

@TestConfiguration
@ComponentScan(basePackageClasses = EntityMapper.class)
public class MapperConfig {}

和/或

@ExtendWith(SpringExtension.class)
@WebMvcTest({SiteController.class, MapperConfig.class})
public class SiteControllerTests { .... }

我使用Gradle:

dependencies {
    implementation 'org.mapstruct:mapstruct:1.5.5.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
    ...
}

在我的IntelliJ(2023.1.2)设置中,我启用了“启用注解处理”和“从类路径获取处理器”。在我的项目结构设置中,mapstruct依赖项设置为Provided。我还安装了MapStruct插件。我的项目也使用Lombok岛,一些答案说这可能是造成这种情况的原因。
尽管如此,当我运行我的测试时,我得到了一个异常:

NoSuchBeanDefinitionException: No qualifying bean of type <my mapper type>

有人知道我错过了什么吗?主项目编译良好。

更新我的Map器是:

public interface EntityMapper<D, E> {

    @Mapping(target = "id", ignore = true)
    @Mapping(target = "createdAt", ignore = true)
    @Mapping(target = "updatedAt", ignore = true)
    void updateEntityFromDto(@MappingTarget E entity, D dto);

    @Mapping(target = "id", ignore = true)
    @Mapping(target = "createdAt", ignore = true)
    @Mapping(target = "updatedAt", ignore = true)
    E fromDto(D dto);

    @Mapping(target = "id", ignore = true)
    @Mapping(target = "createdAt", ignore = true)
    @Mapping(target = "updatedAt", ignore = true)
    List<E> fromDto(List<D> dtoList);

    D toDto(E entity);

    List<D> toDto(List<E> entityList);
}

和/或

@Mapper(componentModel = "spring")
public interface SiteMapper extends EntityMapper<SiteDto, Site> {

    @Override
    @Mapping(source = "user.id", target = "userId")
    SiteDto toDto(Site site);

    @Override
    // Prevent overwriting information
    @Mapping(target = "id", ignore = true)
    @Mapping(target = "createdAt", ignore = true)
    @Mapping(target = "updatedAt", ignore = true)
    @Mapping(target = "user", ignore = true)
    void updateEntityFromDto(@MappingTarget Site site, SiteDto siteDTO);
}
hjzp0vay

hjzp0vay1#

不知道是什么问题。我用Intellij创建了一个新的Spring项目,然后复制了我的源代码,现在它可以工作了,不需要MapperConfig

相关问题