使用构建器模式的 Java 对象映射框架

标签 java mapping dozer mapstruct modelmapper

有没有与构建器一起使用的类映射框架?我想保持我的一些类不可变并避免使用多个构造函数 - 构建器模式可以解决这个问题。但是,我无法使用任何自动使用构建器而不是 getters/setters 的映射框架。

最佳答案

我使用LombokModelMapper得到了以下结果。请参阅:http://modelmapper.org/getting-started/

public class MyService {
     private ModelMapper modelMapper;

     public MyService(){
         this.modelMapper = new ModelMapper();
         this.modelMapper.getConfiguration()
            .setMatchingStrategy(MatchingStrategies.STRICT)
            .setDestinationNamingConvention(LombokBuilderNamingConvention.INSTANCE)
            .setDestinationNameTransformer(LombokBuilderNameTransformer.INSTANCE);
     }

     public OutputDTO aMethod(final InputDTO input){
          return modelMapper.map(input, OutputDTO.OutputDTOBuilder.class).build(); 
     }
}

其中LombokBuilderNamingConvention是:

import org.modelmapper.spi.NamingConvention;
import org.modelmapper.spi.PropertyType;

public class LombokBuilderNamingConvention implements NamingConvention {

    public static LombokBuilderNamingConvention INSTANCE = new LombokBuilderNamingConvention();

    @Override
    public boolean applies(String propertyName, PropertyType propertyType) {
        return PropertyType.METHOD.equals(propertyType);
    }

    @Override
    public String toString() {
        return "Lombok @Builder Naming Convention";
    }

}

并且LombokBuilderNameTransformer是:

import org.modelmapper.spi.NameTransformer;
import org.modelmapper.spi.NameableType;


public class LombokBuilderNameTransformer implements NameTransformer {

    public static final NameTransformer INSTANCE = new LombokBuilderNameTransformer();

    @Override
    public String transform(final String name, final NameableType nameableType) {
        return Strings.decapitalize(name);
    }

    @Override
    public String toString() {
        return "Lombok @Builder Mutator";
    }
}

并且 OutputDTO 可以如下所示:

@Builder // Has .builder() static method
@Value // Thus immutable
public class OutputDTO {
   private String foo;
   private int bar;
} 

关于使用构建器模式的 Java 对象映射框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46530323/

相关文章:

r - 将 data.frame 乘以具有匹配条件的列

javascript - 从数组中对象的数组中获取字符串值

java - 无法替换字符串中的字母

java - Oracle 日期的无效年份异常

java - Glide 在我的 Android 应用程序中不显示图像

sqlite - 不正确的字段类型映射 SubSonic 2.2、SQLite 3

java - 在 Bean Validation 中使用组的想法是什么

java - 不要在 Dozer 中将空条目从一个列表映射到另一个列表

java - 推土机映射 boolean 值

java - 官方 supercsv 推土机示例不适用于 Play — Play 2.1.1,Java