MAPSTRUCT—CustomerServiceImpl中的字段mapperDTO需要类型为';com.howtodoinjava.demo.mapper.MapperDTO';那是找不到的

MAPSTRUCT—CustomerServiceImpl中的字段mapperDTO需要类型为';com.howtodoinjava.demo.mapper.MapperDTO';那是找不到的,java,spring,maven,crud,mapstruct,Java,Spring,Maven,Crud,Mapstruct,我正在使用api rest构建一个crud应用程序,我将使用mapstruct库,但我不能。当我试图用自定义对象映射通过读取数据库返回的数据时,我得到以下错误 你能帮我解决这个问题吗?我得到以下错误 应用程序无法启动 说明: com.howtodoinjava.demo.service.CustomerServiceImpl中的字段mapperDTO需要一个类型为“com.howtodoinjava.demo.mapper.mapperDTO”的bean,但找不到该bean 注入点具有以下注释:

我正在使用api rest构建一个crud应用程序,我将使用mapstruct库,但我不能。当我试图用自定义对象映射通过读取数据库返回的数据时,我得到以下错误

你能帮我解决这个问题吗?我得到以下错误

应用程序无法启动

说明:

com.howtodoinjava.demo.service.CustomerServiceImpl中的字段mapperDTO需要一个类型为“com.howtodoinjava.demo.mapper.mapperDTO”的bean,但找不到该bean

注入点具有以下注释:-@org.springframework.beans.factory.annotation.Autowired(required=true)

行动:

考虑在配置中定义“com.howtodoinjava.demo.mapper.MapperDTO”类型的bean

我的档案

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 
      4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>com.howtodoinjava</groupId>
        <artifactId>demo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.4.RELEASE</version>
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
            <org.projectlombok.version>1.18.10</org.projectlombok.version>
            <m2e.apt.activation>jdt_apt</m2e.apt.activation>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- <dependency> -->
            <!-- <groupId>com.jayway.jsonpath</groupId> -->
            <!-- <artifactId>json-path</artifactId> -->
            <!-- <scope>test</scope> -->
            <!-- </dependency> -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-hateoas</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.hateoas</groupId>
                <artifactId>spring-hateoas</artifactId>
            </dependency>
            <dependency>
                <groupId>com.ibm.db2</groupId>
                <artifactId>jcc</artifactId>
                <version>11.5.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <scope>provided</scope>
            </dependency>

            <!-- Map strunct -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>1.3.1.Final</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-jdk8 -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-jdk8</artifactId>
                <version>1.3.1.Final</version>
            </dependency>

            <!-- json logback -->
            <dependency>
                <groupId>ch.qos.logback.contrib</groupId>
                <artifactId>logback-json-classic</artifactId>
                <version>0.1.5</version>
            </dependency>

            <dependency>
                <groupId>ch.qos.logback.contrib</groupId>
                <artifactId>logback-jackson</artifactId>
                <version>0.1.5</version>
            </dependency>

            <!-- swagger -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>

            <!-- Utility -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.6</version>
            </dependency>

            <!-- Test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>de.bwaldvogel</groupId>
                <artifactId>mongo-java-server</artifactId>
                <version>1.16.0</version>
                <scope>test</scope>
            </dependency>

        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <annotationProcessorPaths>
                            <path>
                                <groupId>org.mapstruct</groupId>
                                <artifactId>mapstruct-processor</artifactId>
                                <version>1.3.1.Final</version>
                            </path>
                            <path>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                                <version>${org.projectlombok.version}</version>
                            </path>
                        </annotationProcessorPaths>
    <!--                    <compilerArgs> -->
    <!--                        <arg>-Amapstruct.defaultComponentModel=spring</arg> -->
    <!--                    </compilerArgs> -->
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>

            </plugins>
        </build>

    </project>
ServiceImpl.java

@Autowired
    private MapperDTO mapperDTO;

    @Override
    public Customer getCustomerById(Integer id) throws RecordNotFoundException {
        Optional<CustomerDTO> utentiEntity = repository.findById(id);
            try {
                if (utentiEntity.isPresent()) {
                    return mapperDTO.customerDTOtoCustomer(utentiEntity.get());
                } else {
                    throw new RecordNotFoundException("No entity record exist for given id");
                }
            }
            catch (Exception e ) {
                log.error(" message  " +e.getMessage(),e);
            }
            return null;
    }

我认为mapstruct jar是不正确的,否则它将在运行时动态地将实体转换为dto,将dto转换为实体。但是,如果您不想使用mapstruct,您可以通过以下方法实现手动转换

@Override
public ProductDTO toProductDTO(Products products) {
    if (products == null) {
        return null;
    }
    ProductDTO productDTO = new ProductDTO();
    productDTO.setName(products.getName());
    productDTO.setDescription(products.getDescription());
    productDTO.setPrice(products.getPrice());
    return productDTO;
}

@Override
public List<ProductDTO> toProductDTOs(List<Products> products) {

    if (products == null) {
        return null;
    }
    List<ProductDTO> listproductdto = new ArrayList<ProductDTO>();
    for (Products eachproducts : products) {
        listproductdto.add(toProductDTO(eachproducts));
    }
    return listproductdto;
}

@Override
public Products toProduct(ProductDTO productDTO) {
    // TODO Auto-generated method stub
    if (productDTO == null) {
        return null;
    }
    Products products = new Products();
    products.setName(productDTO.getName());
    products.setPrice(productDTO.getPrice());
    products.setDescription(productDTO.getDescription());
    return products;
}
@覆盖
公共产品到TopProduct(产品){
如果(产品==null){
返回null;
}
ProductDTO ProductDTO=新ProductDTO();
productDTO.setName(products.getName());
productDTO.setDescription(products.getDescription());
productDTO.setPrice(products.getPrice());
将产品返回给客户;
}
@凌驾
公共列表TopProductDTO(列出产品){
如果(产品==null){
返回null;
}
List listproductdto=新的ArrayList();
对于(每个产品:产品){
添加(toProductDTO(eachproducts));
}
返回listproductdto;
}
@凌驾
公共产品到产品(产品到产品){
//TODO自动生成的方法存根
if(productDTO==null){
返回null;
}
产品=新产品();
products.setName(productDTO.getName());
products.setPrice(productDTO.getPrice());
products.setDescription(productDTO.getDescription());
退货产品;
}
更多细节,你可以检查我的样品,我也尝试了相同的例子。从这里开始

使用

   <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <version>1.3.1.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct</artifactId>
      <version>1.3.1.Final</version>
    </dependency>

org.mapstruct
mapstruct处理器
1.3.1.最终版本
假如
org.mapstruct
映射结构
1.3.1.最终版本
编译时,请检查map结构是否在目标中生成了MapperDTOImpl类

@Override
public ProductDTO toProductDTO(Products products) {
    if (products == null) {
        return null;
    }
    ProductDTO productDTO = new ProductDTO();
    productDTO.setName(products.getName());
    productDTO.setDescription(products.getDescription());
    productDTO.setPrice(products.getPrice());
    return productDTO;
}

@Override
public List<ProductDTO> toProductDTOs(List<Products> products) {

    if (products == null) {
        return null;
    }
    List<ProductDTO> listproductdto = new ArrayList<ProductDTO>();
    for (Products eachproducts : products) {
        listproductdto.add(toProductDTO(eachproducts));
    }
    return listproductdto;
}

@Override
public Products toProduct(ProductDTO productDTO) {
    // TODO Auto-generated method stub
    if (productDTO == null) {
        return null;
    }
    Products products = new Products();
    products.setName(productDTO.getName());
    products.setPrice(productDTO.getPrice());
    products.setDescription(productDTO.getDescription());
    return products;
}
   <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <version>1.3.1.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct</artifactId>
      <version>1.3.1.Final</version>
    </dependency>