gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:16:40 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com