MapStructカスタムする

※ こちら現在調査中

MappingExclusionProviderを使用することで、特定のフィールドへのマッピングを無視することができます

MappingExclusionProviderは、MapStructに対して特定のフィールドを無視するように指示するためのカスタムプロバイダを実装するためのインターフェースです


1. CustomMappingExclusionProviderの実装

特定のフィールドを無視するカスタムプロバイダを作成します

import org.mapstruct.ap.spi.MappingExclusionProvider;
import javax.lang.model.element.Element;

public class CustomMappingExclusionProvider implements MappingExclusionProvider {

    @Override
    public boolean isExcluded(TypeElement element) {
        // フィールド名が "customMethod" の場合は無視
        // ※ 特定のフィールドは難しい。。。
        return element.getSimpleName().toString().equals("customMethod");
    }
}

2. META-INF/servicesディレクトリに設定ファイルを作成

次に、META-INF/servicesディレクトリにorg.mapstruct.ap.spi.MappingExclusionProviderというファイルを作成し、カスタムプロバイダの完全修飾名を記述します

ディレクトリとファイルの作成

プロジェクトのsrc/main/resources/META-INF/servicesディレクトリに以下のファイルを作成します

src/main/resources/META-INF/services/org.mapstruct.ap.spi.MappingExclusionProvider

ファイルの内容

ファイルの内容にはカスタムプロバイダの完全修飾名を記述します

com.example.CustomMappingExclusionProvider

3. build.gradleファイルの設定

plugins {
    id 'java'
    id 'eclipse' // Optional: for Eclipse integration
    id 'idea' // Optional: for IntelliJ IDEA integration
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.mapstruct:mapstruct:1.5.5.Final' // 最新バージョンを指定してください
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
    compileOnly 'org.projectlombok:lombok:1.18.24' // Optional: if you're using Lombok
    annotationProcessor 'org.projectlombok:lombok:1.18.24' // Optional: if you're using Lombok
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

tasks.withType(JavaCompile) {
    options.annotationProcessorPath = configurations.annotationProcessor
    options.compilerArgs << "-Amapstruct.defaultComponentModel=spring" // Optional: if you're using Spring
}

【補足】

META-INF/servicesディレクトリに設定ファイルを作成するのは、MappingExclusionProviderのようなSPI(サービスプロバイダインターフェース)を登録する標準的な方法です

これにより、MapStructがカスタムMappingExclusionProviderを認識して使用できるようになります

是非フォローしてください

最新の情報をお伝えします