以前在其他版本的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);
}
1条答案
按热度按时间hjzp0vay1#
不知道是什么问题。我用Intellij创建了一个新的Spring项目,然后复制了我的源代码,现在它可以工作了,不需要
MapperConfig
。