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

mapstruct-@mapper注释不创建bean

卫烨
2023-03-14

我从以下来源下载了应用程序https://github.com/springframeworkguru/spring5-mvc-rest/tree/vendor-api,但Mapstruct遇到了问题。

@Mapper
public interface CategoryMapper {

CategoryMapper INSTANCE = Mappers.getMapper(CategoryMapper.class);


CategoryDTO categoryToCategoryDTO(Category category);
@Data
public class CategoryDTO {
    private Long id;
    private String name;
}
@Data
@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}
@Service
public class CategoryServiceImpl implements CategoryService {

    private final CategoryMapper categoryMapper;
    private final CategoryRepository categoryRepository;

    public CategoryServiceImpl(CategoryMapper categoryMapper, CategoryRepository categoryRepository) {
        this.categoryMapper = categoryMapper;
        this.categoryRepository = categoryRepository;
    }
}
<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.2.0.CR2</org.mapstruct.version>
</properties>
<dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-jdk8</artifactId>
        <version>${org.mapstruct.version}</version>
</dependency>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <annotationProcessorPaths>
            <path>
                 <groupId>org.projectlombok</groupId>
                 <artifactId>lombok</artifactId>
                 <version>${lombok.version}</version>
            </path>
            <path>
                 <groupId>org.mapstruct</groupId>
                 <artifactId>mapstruct-processor</artifactId>
                 <version>${org.mapstruct.version}</version>
           </path>
        </annotationProcessorPaths>
        <compilerArgs>
           <compilerArg>
                 -Amapstruct.defaultComponentModel=spring
           </compilerArg>
        </compilerArgs>
    </configuration>
</plugin>
Parameter 0 of constructor in 
guru.springfamework.services.CategoryServiceImpl required a bean of type 'guru.springfamework.api.v1.mapper.CategoryMapper' that could not be found.
Consider defining a bean of type 'guru.springfamework.api.v1.mapper.CategoryMapper' in your configuration.

我认为在Intellij注释中@mapper不为mapper创建bean。我没有改变John GitHub的代码。你知道吗?我试图将生成的路径源更改为目标,但这没有帮助,谢谢你的帮助。

共有1个答案

养聪
2023-03-14

我通过做来解决这个错误

>

  • MVN清洁安装
  • 还将此添加到您的pom中

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
                <compilerArgs>
                    <compilerArg>
                           -Amapstruct.defaultComponentModel=spring
                    </compilerArg>
                </compilerArgs>
            </configuration>
        </plugin>
    

  •  类似资料:
    • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

    • 我的一个Mapstruct映射器没有使用另一个映射器与 我们的将实体映射到DTO。一个包含一个属性,我正在尝试从该属性映射到一个DTO。 因此,问题在于嵌套对象,即到。 以下是源代码: 从ValidationSupport NeedMapper.java: 来自ActivityMapper.java: 来自ValidationSupportNeedEntity.java(实体) 来自Validat

    • mapstruct如何在以下方法之间做出决定: > 使用source的getter获取所有参数,然后调用目标的构造函数来创建映射。 使用所有空参数调用目标的构造函数,然后使用setter设置每个参数。 第二种方法可能是 这是目标对象类的样子。

    • 问题内容: 我正在尝试做一些Java注释魔术。我必须说,我仍在追赶注释技巧,并且某些事情对我来说还不太清楚。 所以…我有一些带注释的类,方法和字段。我有一个方法,它使用反射对类进行一些检查并将一些值注入到类中。这一切都很好。 但是,我现在面临的情况是我需要一个注释实例(可以这么说)。所以…批注与常规接口不同,您不能对类进行匿名实现。我知道了。我在这里浏览了有关类似问题的一些帖子,但似乎无法找到所需

    • 我在代码中使用Lombok自动生成getter和setter代码。我想添加其他个人注释并使用它。 例如,我想添加一个方法来验证列表中是否存在一个键: 创建注释后,我将执行以下操作:

    • 我有Android Studio 3.1.2 我有Kotlin 1.2.41-release-Studio3。1-1. ,我只使用kotlin kapt: 我的事件日志显示0个警告/错误: 这是输出: 我已经完成了所有的清理和重建工作。有一些警告,但与kapt无关。我可以先解决这些问题吗?