MAPSTRUCT—CustomerServiceImpl中的字段mapperDTO需要类型为';com.howtodoinjava.demo.mapper.MapperDTO';那是找不到的
我正在使用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.xmlMAPSTRUCT—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 注入点具有以下注释:
<?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>