Java 推土机-在从一个列表映射到另一个列表时在列表中转换对象?

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<

我们使用推土机将实体映射到dto对象

我们要解决以下问题:假设我们有一个A实体,它与B实体有一对多的关系。映射时,我们希望将B实体中的字段produktId(例如1234)转换为B Dto中的修改值(例如00001234)

在从一个列表映射到另一个列表时,是否可以在列表中转换对象

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;
}
}
您可以使用