ModelMapper:如何根据源中的集合是否有元素来设置目标属性
ModelMapper: How to set a destination property based on whether collection in source has elements
我有一个由 ModelMapper 管理的实体到 dto 的转换。我的规范已经修改,现在我需要在DTO中添加一个布尔值属性来确定实体中的集合是否有元素。
所以,如果我的实体看起来像:
public class MyEntity {
private Integer id;
private String someField;
@OneToMany
private Set<Foo> foos;
private Date createdDate;
private Date modifiedDate;
private Integer version;
// getters & setters
}
我更新后的 DTO 看起来像:
public class MyEntityDto {
private Integer id;
private String someField;
private Boolean hasFoos;
// getters & setters
}
我在流中从实体转换为 DTO:
public List<MyEntityDto> convert(List<MyEntity) l) {
return l.stream
.map(this::toDto)
.collect(Collectors.toList());
}
为了满足更新后的规范,我修改了 toDto
方法以手动添加布尔值,但我对此并不完全满意,并且更愿意在 ModelMapper 中进行转换,如果只是作为学术练习的话.
private MyEntityDto toDto(MyEntity e ) {
MyEntityDto dto = modelMapper.map(e, MyEntityDto.class);
dto.setHasFoos(e.foos.size() > 0);
return dto;
}
所以,我的问题是,如何根据实体中的 Set 是否具有仅使用 ModelMapper API 的元素来设置 DTO 的布尔值 hasFoos
属性?
您可以设置 typeMap 以使用您自己的转换器转换 类 的特定字段。
ModelMapper modelMapper = new ModelMapper();
Converter<Set, Boolean> SET_TO_BOOLEAN_CONVERTER =
mappingContext -> !mappingContext.getSource().isEmpty();
modelMapper.createTypeMap(MyEntity.class, MyEntityDto.class)
.addMappings(mappings -> mappings.using(SET_TO_BOOLEAN_CONVERTER)
.map(MyEntity::getFoos, MyEntityDto::setHasFoos));
我有一个由 ModelMapper 管理的实体到 dto 的转换。我的规范已经修改,现在我需要在DTO中添加一个布尔值属性来确定实体中的集合是否有元素。
所以,如果我的实体看起来像:
public class MyEntity {
private Integer id;
private String someField;
@OneToMany
private Set<Foo> foos;
private Date createdDate;
private Date modifiedDate;
private Integer version;
// getters & setters
}
我更新后的 DTO 看起来像:
public class MyEntityDto {
private Integer id;
private String someField;
private Boolean hasFoos;
// getters & setters
}
我在流中从实体转换为 DTO:
public List<MyEntityDto> convert(List<MyEntity) l) {
return l.stream
.map(this::toDto)
.collect(Collectors.toList());
}
为了满足更新后的规范,我修改了 toDto
方法以手动添加布尔值,但我对此并不完全满意,并且更愿意在 ModelMapper 中进行转换,如果只是作为学术练习的话.
private MyEntityDto toDto(MyEntity e ) {
MyEntityDto dto = modelMapper.map(e, MyEntityDto.class);
dto.setHasFoos(e.foos.size() > 0);
return dto;
}
所以,我的问题是,如何根据实体中的 Set 是否具有仅使用 ModelMapper API 的元素来设置 DTO 的布尔值 hasFoos
属性?
您可以设置 typeMap 以使用您自己的转换器转换 类 的特定字段。
ModelMapper modelMapper = new ModelMapper();
Converter<Set, Boolean> SET_TO_BOOLEAN_CONVERTER =
mappingContext -> !mappingContext.getSource().isEmpty();
modelMapper.createTypeMap(MyEntity.class, MyEntityDto.class)
.addMappings(mappings -> mappings.using(SET_TO_BOOLEAN_CONVERTER)
.map(MyEntity::getFoos, MyEntityDto::setHasFoos));