Java 推土机-在从一个列表映射到另一个列表时在列表中转换对象?
我们使用推土机将实体映射到dto对象 我们要解决以下问题:假设我们有一个A实体,它与B实体有一对多的关系。映射时,我们希望将B实体中的字段produktId(例如1234)转换为B Dto中的修改值(例如00001234) 在从一个列表映射到另一个列表时,是否可以在列表中转换对象Java 推土机-在从一个列表映射到另一个列表时在列表中转换对象?,java,dozer,Java,Dozer,我们使用推土机将实体映射到dto对象 我们要解决以下问题:假设我们有一个A实体,它与B实体有一对多的关系。映射时,我们希望将B实体中的字段produktId(例如1234)转换为B Dto中的修改值(例如00001234) 在从一个列表映射到另一个列表时,是否可以在列表中转换对象 class AEntity { List<BEntity> bEntities; } class BEntity { Long produktId; } class ADto { List<
class AEntity {
List<BEntity> bEntities;
}
class BEntity {
Long produktId;
}
class ADto {
List<BDto> bDtos;
}
class BDto {
String produktId;
}
类实体{
列出底栖生物;
}
类本蒂{
长produktId;
}
ADto类{
列出BDTO;
}
类别BDto{
字符串produktId;
}
正如安德烈所建议的那样,这里似乎适合使用自定义转换器。这样的东西应该和推土机5.5.1一起使用:
import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
import org.dozer.loader.api.BeanMappingBuilder;
import org.dozer.loader.api.FieldsMappingOptions;
public class MappingExample {
private Mapper mapper;
public ADto map(AEntity aEntity) {
return getMapper().map(aEntity, ADto.class);
}
private Mapper getMapper() {
if (mapper == null) {
BeanMappingBuilder mappingBuilder = new BeanMappingBuilder() {
@Override
protected void configure() {
// Or just annotate getbEntities() in AEntity
// with @Mapping("bDtos")
mapping(AEntity.class, ADto.class)
.fields("bEntities", "bDtos");
// Specify custom conversion for the Long field
mapping(BEntity.class, BDto.class)
.fields("produktId", "produktId",
FieldsMappingOptions.customConverter(
LongToStringConverter.class));
}
};
// Pass the custom mappings to Dozer
DozerBeanMapper beanMapper = new DozerBeanMapper();
beanMapper.addMapping(mappingBuilder);
mapper = beanMapper;
}
return mapper;
}
}
转换器可能如下所示:
import org.dozer.CustomConverter;
public class LongToStringConverter implements CustomConverter {
@Override
public Object convert(Object existingDestFieldValue, Object srcFieldValue,
Class<?> destinationClass, Class<?> sourceClass) {
if (srcFieldValue != null && srcFieldValue instanceof Long
&& String.class.equals(destinationClass)) {
return String.format("%04d", (Long)srcFieldValue);
}
return null;
}
}
import org.dozer.CustomConverter;
公共类LongToStringConverter实现CustomConverter{
@凌驾
公共对象转换(对象existingDestFieldValue、对象srcFieldValue、,
类destinationClass、类sourceClass){
if(srcFieldValue!=null&&srcFieldValue instanceof Long
&&String.class.equals(destinationClass)){
返回字符串。格式(“%04d”,(长)srcFieldValue);
}
返回null;
}
}
您可以使用