2017-11-04 26 views
0

を作成していない私は、このソースhttps://github.com/springframeworkguru/spring5-mvc-rest/tree/vendor-api からアプリケーションをダウンロードし、私はMapStructに問題があります。MapStruct - 注釈@Mapper豆

@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; 
    } 
} 

とのpom.xml依存関係で、私は2つだけ::

を貼り付け私は私のIntelliJ注釈@Mapperに用Beanを作成していないと思い

Consider defining a bean of type 'guru.springfamework.api.v1.mapper.CategoryMapper' in your configuration. 

:3210

<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. 

アクションマッパー。 John GitHubからコードを変更しませんでした。 パスを生成したソースをターゲットに変更しようとしましたが、これは役に立ちません。 ありがとうございました。

+0

intellijの設定で注釈付けプロセスが有効になっているかどうかを確認してください。 – wsl

+0

はい。これは有効になっています。 – Kutti

+0

それは奇妙です、私はコンパイル&exampleブランチmapstructを実行し、すべてが動作しているようです。おそらくintellijのバージョンを更新しようとするか、intellijのためのmapstructプラグインをインストールしてください – wsl

答えて

0

私はこれが唯一のIntelliJで動作していないと推定。 IntelliJのは、実際にMavenのコンパイラannotationProcessorPaths(詳細はIDEA-150621を参照)から注釈プロセッサをピックアップしていない既知の問題が、あります。

はその上でリンクされ、リポジトリ内の例はMapStructベストプラクティスに反対しています。 springcomponentModelを使用した場合、Mappers.getMapperを使用しないでください。その理由は、工場がバネを介して構築する必要があるため、マッパーを正しく構築することができないためです。また、コンパイラの引数mapstruct.defaultComponentModelは、IDEとの統合を中断する可能性があります(IntelliJの設定でも同様に設定する必要があります)