使用自定义方法为ModelMapper定义映射

时间:2018-06-20 15:07:39

标签: java modelmapper

我想使用org.modelmapper.ModelMapper将某个实体映射到另一个实体。问题在于,为了为目标实体设置一些值,我需要根据源实体的值来计算该值。

我产生了这样的代码:

private TargerEntity convertToTargerEntity( SourceEntity src ) {
    this.modelMapper.typeMap( SourceEntity.class, TargerEntity.class )
            .addMapping( src -> src.getUser().getId(), TargerEntity::setUserId )
            .addMapping( src -> getValueProperty(src), TargerEntity::setEvaluatedValue );

    return this.modelMapper.map( src, TargerEntity.class );
}

负责计算的方法如下:

private String getValueProperty( SourceEntity entity ) {
    return entity.getInformation().stream()
        .filter( property -> Objects.equals( property.getName(), "desiredPropertyValue" ) )
        .findFirst().orElse( null );
}

但是在映射时,我得到了一个org.modelmapper.internal.ErrorsException,而没有任何其他消息。

什么可能导致这种行为?它应该工作吗?

1 个答案:

答案 0 :(得分:2)

尝试使用Converter

private TargerEntity convertToTargerEntity(SourceEntity src) {
    Converter<Information, String> converter =
            ctx -> ctx.getSource() == null ? "" : ctx.getSource().stream()
                    .filter(property -> Objects.equals(property.getName(), "desiredPropertyValue"))
                    .findFirst().orElse(null);

    this.modelMapper.typeMap(SourceEntity.class, TargerEntity.class 
            .addMapping(src -> src.getUser().getId(), TargerEntity::setUserId)
            .addMappings(mapper -> mapper.using(converter).map(SourceEntity::getInformation, TargerEntity::setEvaluatedValue));

    return this.modelMapper.map(src, TargerEntity.class);
}

Information类型替换为您的类型。转换器也可以定义为Singleton对象。

相关问题