1. 程式人生 > >3.2Adding custom methods to mappers(在映射器中添加自定義方法)

3.2Adding custom methods to mappers(在映射器中添加自定義方法)

efault ont truct card 無法 代碼生成 maps ace 而不是

3.2Adding custom methods to mappers(在映射器中添加自定義方法)

有些情況下,我們需要實現一些MapStruct無法直接自動生成的復雜類型間映射。一種方式是復用其他已實現的映射。或者,在使用java8或者更高版本的時候,可以直接在映射器接口中實現自定義方法作為默認方法,如果參數和返回類型匹配, 生成的代碼將調用默認方法。

舉個例子,加入我們要把Person映射成PersonDto,因為涉及到一些特殊的邏輯,MapStruct無法直接將映射代碼生成,您可以從前面的示例中定義映射器, 如下所示:

Example 8. Mapper which defines a custom mapping with a default method

@Mapper
public interface CarMapper {

    @Mappings({...})
    CarDto carToCarDto(Car car);

    default PersonDto personToPersonDto(Person person) {
        //hand-written mapping logic
    }
}

由 MapStruct 生成的實現方法 carToCarDto (),在映射【司機】屬性時, carToCarDto () 中生成的代碼將調用手動實現的 personToPersonDto () 方法。

映射程序還可以以抽象類的形式而不是接口來定義, 並直接在該映射器類中實現自定義方法。在這種情況下, MapStruct 將生成具有所有抽象方法實現的抽象類的擴展。此方法在聲明默認方法方面的優點是可以在映射器類中聲明其他字段。

前面的示例中, 從Person到 PersonDto 的映射需要一些特殊的邏輯, 同樣可以這樣定義:

Example 9. Mapper defined by an abstract class

@Mapper
public abstract class CarMapper {

    @Mappings(...)
    public abstract CarDto carToCarDto(Car car);

    public PersonDto personToPersonDto(Person person) {
        //hand-written mapping logic
    }
}

MapStruct 將生成 CarMapper 的子類, 並在聲明為抽象的情況下實現 carToCarDto () 方法。在映射【司機】屬性時, carToCarDto () 中生成的代碼將調用手動實現的 personToPersonDto () 方法。

3.2Adding custom methods to mappers(在映射器中添加自定義方法)