MAPSTRUCT-CustomerServiceImpl中的字段mapperDTO要求找到类型为'com.howtodoinjava.demo.mapper.MapperDTO'的bean
来源:爱站网时间:2021-09-16编辑:网友分享
我正在使用api rest构建一个原始应用程序,而我将使用mapstruct库,但我不能。当我尝试映射通过使用自定义对象在数据库上读取返回的数据时,我...
问题描述
我正在使用api rest构建一个原始应用程序,而我将使用mapstruct库,但我不能。当我尝试使用自定义对象映射通过读取数据库返回的数据时,出现以下错误
您能帮我解决这个问题吗?我收到以下错误
申请无法开始
说明:
无法找到com.howtodoinjava.demo.service.CustomerServiceImpl中的字段mapperDTO的类型为com.howtodoinjava.demo.mapper.MapperDTO的bean。
注入点具有以下注释:-@ org.springframework.beans.factory.annotation.Autowired(required = true)
动作:
考虑在您的配置中定义类型为'com.howtodoinjava.demo.mapper.MapperDTO'的bean。
我的文件
pom.xml
4.0.0 com.howtodoinjava demo 1.0.0-SNAPSHOT demo Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 2.2.4.RELEASE UTF-8 UTF-8 1.8 1.3.1.Final 1.18.10 jdt_apt org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-starter-hateoas org.springframework.hateoas spring-hateoas com.ibm.db2 jcc 11.5.0.0 org.springframework.boot spring-boot-starter-data-jpa org.projectlombok lombok provided org.mapstruct mapstruct 1.3.1.Final org.mapstruct mapstruct-jdk8 1.3.1.Final ch.qos.logback.contrib logback-json-classic 0.1.5 ch.qos.logback.contrib logback-jackson 0.1.5 io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2 commons-io commons-io 2.6 org.springframework.boot spring-boot-starter-test test de.bwaldvogel mongo-java-server 1.16.0 test org.apache.maven.plugins maven-compiler-plugin org.mapstruct mapstruct-processor 1.3.1.Final org.projectlombok lombok ${org.projectlombok.version} org.springframework.boot spring-boot-maven-plugin
MapperDTO.java
@Mapper(componentModel="spring")
/*Durante la compilazione, MapStruct genererà un'implementazione di questa interfaccia.*/
public interface MapperDTO {
//MapperDTO INSTANCE = Mappers.getMapper(MapperDTO.class);
Customer customerDTOtoCustomer(CustomerDTO customerDTO);
CustomerDTO customertoCustomerDTO(Customer customer);
}
ServiceImpl.java
@Autowired
private MapperDTO mapperDTO;
@Override
public Customer getCustomerById(Integer id) throws RecordNotFoundException {
Optional 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;
}
demoapplication.java
@SpringBootApplication(scanBasePackages="com.howtodoinjava.demo")
@EnableJpaRepositories (basePackages="com.howtodoinjava.demo.repository")
@EntityScan(basePackages="com.howtodoinjava.demo.modelDTO")
@ComponentScan({"com.howtodoinjava.demo.service","com.howtodoinjava.demo.controller", "com.howtodoinjava.demo.mapper"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
思路一:
我认为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 toProductDTOs(List products) {
if (products == null) {
return null;
}
List listproductdto = new ArrayList();
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;
}
有关更多详细信息,您可以检查我的示例,我也尝试过相同的示例。从这里enter link description here
思路二:
使用
org.mapstruct mapstruct-processor 1.3.1.Final provided org.mapstruct mapstruct 1.3.1.Final
并且在编译时,请检查地图结构是否在目标中生成了MapperDTOImpl类