JAVA - 使用 ModelMapper 映射表达式,但不使用 setter

标签 java collections setter modelmapper

我正在使用 ModelMapper 将 JPA 实体映射到 DTO。我有关于实体的集合 dto 由 wsimport 从 wsdl 文件生成,但不会生成集合的 setter

public class sampleEntity{
    private String name;
    private Collection<String> list;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }    

    public Collection<String> getList() {
        return list;
    }

    public void setList(Collection<String> list) {
        this.list = list;
    }
}

public class sampleDTO{
    private String name;
    private Collection<String> list;

    //getters & setters

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Collection<String> getList() {
        return list;
    }
//no collection setters with jaxb!!! Use getList().add()

}

我使用一个简单的 MapperUtils 来映射实体和 dto

public class MapperUtils {

    private static ModelMapper modelMapper = new ModelMapper();

    static {
        modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE);
    }

    private MapperUtils() {
    }

    public static <D, T> D map(final T entity, Class<D> outClass) {
        return modelMapper.map(entity, outClass);
    }

    public static <D, T> List<D> mapAll(final Collection<T> entityList, Class<D> outCLass) {
        return entityList.stream().map(entity -> map(entity, outCLass)).collect(Collectors.toList());
    }

    public static <S, D> D map(final S source, D destination) {
        modelMapper.map(source, destination);
        return destination;
    }

}

那么如果Entity.XXXX是一个Collection,ModelMapper如何使用DTO.getXXXX.add()呢?

最佳答案

我不知道 ModelMapper 是否能够支持 getList().add() 在映射期间调用目标。

这里有 2 种方法可能会解决您的问题。

方法一:启用字段匹配

modelMapper.getConfiguration()
    .setFieldAccessLevel(AccessLevel.PRIVATE)
    .setFieldMatchingEnabled(true);

方法二:

尝试使用 wsimport 生成 setter 代码。

关于JAVA - 使用 ModelMapper 映射表达式,但不使用 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962457/

相关文章:

java - 与 com.google.common.util.concurrent 等效的实现

java - 我们应该使用最顶层的父类作为引用变量的类型吗?

validation - 如何在抽象类级别提供值验证?

java - Java 中的 Setter 参数最终

sql-server-2008 - Fluent Nhibernate 和 Sql Server 私有(private) setter 错误

java - 处理运行时依赖性

java - 发布/订阅模型,主题的结构是什么?

java - 如何在Java Swing中制作按钮点击 block ?

java - Hashmap 转换哪个更好

python - 如何在不调用 RuntimeError 的情况下使用循环删除 Counter 对象中的条目?