Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用模型映射器映射修改的、不匹配目标、源值?_Java_Reusability_Modelmapper - Fatal编程技术网

Java 如何使用模型映射器映射修改的、不匹配目标、源值?

Java 如何使用模型映射器映射修改的、不匹配目标、源值?,java,reusability,modelmapper,Java,Reusability,Modelmapper,我有两个API实体(EntityA和EntityB)实现了BaseEntity。 两个实体都具有可为空的参数标识符 @Value @Builder(builderClassName = "Builder") public class EntityA implements BaseEntity { String identifier; ... } 我还有POJO和externalId参数。此字段值应包括源标识符的4个字符的前缀 @Data @ToString(call

我有两个API实体(
EntityA
EntityB
)实现了
BaseEntity
。 两个实体都具有可为空的参数
标识符

@Value
@Builder(builderClassName = "Builder")
public class EntityA implements BaseEntity {
    String identifier;
...
}
我还有POJO和
externalId
参数。此字段值应包括源标识符的4个字符的前缀

@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Pojo {
    private String externalId;
    ...
}
我想使用
ModelMapper
将API值映射到现有的POJO
PojoEntity
。但是,

  • 源getter和目标setter不匹配
  • 应修改源的值
  • 我可以在已映射的POJO上设置值post factum

    public Pojo mapEntityAToPojo(EntityA entity, Pojo pojo) {
        modelMapper.map(entity, pojo);
        Optional.ofNullable(entity.getIdentifier()).ifPresent(
                identifier -> pojo.setExternalId(getIdentifierAlphaNumericPrefix(identifier)));
        return pojo;
    }
    
    public Pojo mapEntityBToPojo(EntityB entity, Pojo pojo) {
        modelMapper.map(entity, pojo);
        Optional.ofNullable(entity.getIdentifier()).ifPresent(
                identifier -> pojo.setExternalId(getIdentifierAlphaNumericPrefix(identifier)));
        return pojo;
    }
    
    private String getIdentifierAlphaNumericPrefix(String identifier) {
        return identifier.replaceAll("[^a-zA-Z0-9]", "").substring(0, 4);
    }
    
    但我确信,有一种更优雅的方式来配置模型映射器。
    有什么建议吗

    public Pojo mapEntityAToPojo(EntityA entity, Pojo pojo) {
        modelMapper.map(entity, pojo);
        Optional.ofNullable(entity.getIdentifier()).ifPresent(
                identifier -> pojo.setExternalId(getIdentifierAlphaNumericPrefix(identifier)));
        return pojo;
    }
    
    public Pojo mapEntityBToPojo(EntityB entity, Pojo pojo) {
        modelMapper.map(entity, pojo);
        Optional.ofNullable(entity.getIdentifier()).ifPresent(
                identifier -> pojo.setExternalId(getIdentifierAlphaNumericPrefix(identifier)));
        return pojo;
    }
    
    private String getIdentifierAlphaNumericPrefix(String identifier) {
        return identifier.replaceAll("[^a-zA-Z0-9]", "").substring(0, 4);
    }