我有一个由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进行转换。< / p>
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
属性?
答案 0 :(得分:2)
您可以设置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));