带有groovy类的MapStruct

iaqfqrcu  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(213)

我想在groovy类上使用MapstructMap器和gradle。

dependencies {
    ...
    compile 'org.mapstruct:mapstruct:1.4.2.Final'

    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
    testAnnotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' // if you are using mapstruct in test code
}

问题是Map器的实现类没有生成,我也尝试为groovy编译任务应用不同的选项,但是没有用。

compileGroovy {
    options.annotationProcessorPath = configurations.annotationProcessor
    // if you need to configure mapstruct component model
    options.compilerArgs << "-Amapstruct.defaultComponentModel=default"
    options.setAnnotationProcessorGeneratedSourcesDirectory( file("$projectDir/src/main/generated/groovy"))
}

有人知道Mapstruct是否可以与groovy类一起工作,以及我必须如何配置它吗?

z6psavjg

z6psavjg1#

因此,您可以使用以下构建:

plugins {
    id 'groovy'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.mapstruct:mapstruct:1.4.2.Final'
    implementation 'org.codehaus.groovy:groovy-all:3.0.9'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
}

compileGroovy.groovyOptions.javaAnnotationProcessing = true

用这个Car(从他们的例子稍微修改)

import groovy.transform.Immutable

@Immutable
class Car {
    String make;
    int numberOfSeats;
    CarType type;
}

而这个CarDto(同样,稍微修改了一下)

import groovy.transform.ToString

@ToString
class CarDto {

    String make;
    int seatCount;
    String type;
}

那么,您需要在CarMapper中做的唯一更改就是忽略Groovy添加到对象中的metaClass属性:

import org.mapstruct.Mapper
import org.mapstruct.Mapping
import org.mapstruct.factory.Mappers

@Mapper
interface CarMapper {
    CarMapper INSTANCE = Mappers.getMapper(CarMapper)

    @Mapping(source = "numberOfSeats", target = "seatCount")
    @Mapping(target = "metaClass", ignore = true)
    CarDto carToCarDto(Car car)
}

然后你可以这样做:

class Main {

    static main(args) {
        Car car = new Car("Morris", 5, CarType.SEDAN);

        CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);

        println carDto
    }
}

输出:

main.CarDto(Morris, 5, SEDAN)

相关问题