gpt4 book ai didi

java - Dozer - 在从列表映射到列表时将对象转换为列表?

转载 作者:行者123 更新时间:2023-11-30 03:51:08 26 4
gpt4 key购买 nike

我们使用 Dozer 将实体映射到 dto 对象。

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

在从列表映射到列表时是否可以在列表中转换对象?

class AEntity {

List<BEntity> bEntities;
}

class BEntity {
Long produktId;
}

class ADto {
List<BDto> bDtos;
}

class BDto {
String produktId;
}

最佳答案

正如安德烈(André)建议的那样,自定义转换器在这里似乎很合适。随着API mapping像这样的东西应该适用于 Dozer 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;
}
}

关于java - Dozer - 在从列表映射到列表时将对象转换为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431650/

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