当前位置: 首页 > 知识库问答 >
问题:

使用Spring创建MapStruct bean时出错

漆雕原
2023-03-14

尝试在这里使用Mapstruct做一些测试。我有以下类:

试验等级

RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class MapperTests {

@Autowired
private UsuarioMapper usuarioMapper; //Can't autowire(No typo found)

@Test
public void dadoUsuarioSalvarDTO_quandoMapeioParaUsuario_entaoRetornaUsuario(){

    //Dado
    UsuarioSalvarDTO usuarioSalvarDTO = new UsuarioSalvarDTO();
    usuarioSalvarDTO.setEmail("test@test.com");
    usuarioSalvarDTO.setSenha("123456789");
    usuarioSalvarDTO.setStatus(TipoStatus.ATIVO);

    Usuario usuario = usuarioMapper.toEntity(usuarioSalvarDTO);

    Assert.assertEquals(usuario.getEmail(), "test@test.com");
    Assert.assertEquals(usuario.getSenha(), "123456789");
    Assert.assertEquals(usuario.getStatus(), TipoStatus.ATIVO);


}
}

测绘仪

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.WARN)
public interface UsuarioMapper {

@Mappings({
        @Mapping(target = "id", ignore = true),
        @Mapping(target = "createdAt", ignore = true),
        @Mapping(target = "updatetAt", ignore = true),
        @Mapping(source="usuarioSalvarDTO.email", target = "email")
})
Usuario toEntity(UsuarioSalvarDTO usuarioSalvarDTO);

}

在这里考虑模型

生成的通用MapperImpl:

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2018-11-24T00:40:25-0200",
comments = "version: 1.2.0.Final, compiler: javac, environment: Java 1.8.0_181 (Oracle Corporation)"
)
@Component
public class UsuarioMapperImpl implements UsuarioMapper {

@Override
public Usuario toEntity(UsuarioSalvarDTO usuarioSalvarDTO) {
    if ( usuarioSalvarDTO == null ) {
        return null;
    }

    Usuario usuario = new Usuario();

    usuario.setEmail( usuarioSalvarDTO.getEmail() );
    usuario.setSenha( usuarioSalvarDTO.getSenha() );
    usuario.setStatus( usuarioSalvarDTO.getStatus() );

    return usuario;
    }
}

当我尝试运行测试时,他给出了以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error         creating bean with name 'br.com.financeiroAdam.demo.MapperTests': Unsatisfied dependency expressed through field 'usuarioMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'br.com.financeiroAdam.demo.mapper.UsuarioMapper' available: expected at least 1 bean which qualifies as autowire candidate.

MapperTest中的@Autowire不起作用。它声称:“无法自动连线。找不到“UsuarioMapper”类型的beans。

已尝试:

  • gradle build(无错误)
  • gradle build-x test(无错误)
  • 使缓存无效/重新启动
  • 重新导入项目

使用:

  • 智能
  • 坡度
  • Spring
  • 龙目(Lombok)

build.gradle

buildscript {
ext {
    springBootVersion = '2.1.0.RELEASE'
}
repositories {
    mavenCentral()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}

plugins {
id 'net.ltgt.apt' version '0.8'
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'br.com.financeiroAdam'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
mavenCentral()
}


dependencies {
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-web')

compileOnly('org.projectlombok:lombok:1.18.2')

compile 'org.mapstruct:mapstruct-jdk8:1.2.0.Final'
testImplementation('org.springframework.boot:spring-boot-starter-test')

apt('org.projectlombok:lombok:1.18.2')
apt('org.mapstruct:mapstruct-processor:1.2.0.Final')

}

什么都试过了。我认为mapstruct根本不想工作。有什么解决办法吗?

共有2个答案

何乐
2023-03-14

添加包含以下内容的配置文件:

       @ComponentScan("The path to mapstract classes")

       @Configuration
       public class MapstructConfig {   
       }

再加上Spring。工厂文件:

       org.springframework.boot.autoconfigure.EnableAutoConfiguration=
       "The path of the config class that created"
郎德馨
2023-03-14
//Use @Mock instead of @Autowired

@Mock
private UsuarioMapper usuarioMapper; 

//In test method use the below
    Mockito.doReturn(info).when(usuarioMapper).XYXMethod(ArgumentMatchers.argThat(t24InfoMatcher));
 类似资料:
  • 我使用的是Spring 3.1.4 服务实现 DAO实现 web.xml

  • 我使用了Java8并将其升级到Java11,但当我为新的Spring Boot项目设置时,在pom.xml中出现以下错误: 第一次创建项目时的pom.xml是: 然后自从我使用了java 11,我就变成了: 当我构建我的项目时,它向我展示:

  • 我使用的是Spring Boot 2.3.3。发布后,我们决定将版本更新为2.5.5,从而使spring云依赖项::2020.0.3和spring云gcp依赖项::2.0.4 当我在maven中运行包目标时,我的单元测试运行得非常好。然而,当我尝试运行集成测试时,应用程序在尝试创建Pubsub通道时失败。正如你所看到的,贝娄。 关于代码,我没有更改。 ''' ''' ''' ''' 非常感谢提前!

  • 我是春靴新来的。我试图用hibernate连接MySql db,但当我命令 mvn Spring-Boot:Run 我的pom.xml在这里: hibernate.dialog:org.hibernate.dialt.mysql5dialog hibernate.show_sql:true hibernate.hbm2ddl.auto:update entitymanager.packageSto

  • 我正在尝试学习这篇spring-lemon入门教程(https://naturalprogrammer.gitbooks.io/spring-lemon-gett-started/content/index.html),但在某一点上我无法更进一步。我创建了一个新的spring starter项目(spring boot),并且能够将spring lemon添加到其中。我只做了说明,但是当我启动ma

  • 错误500 JDK 1.8 Tomcat 8.0.38 HTTP状态500-处理JSP页面/index1时发生异常。11号线 类型异常报告 消息处理JSP页面/index1时发生异常。11号线 说明服务器遇到内部错误,无法满足此请求。 index1。jsp 通用域名格式。快乐的心情。业主立案法团。豆小豆。JAVA RegisterAndLoginController。JAVA web.xml WE