首页 > 解决方案 > 如何使用模型映射器映射修改后的、不匹配目标、源值的映射?

问题描述

我有两个 API 实体 (EntityAEntityB) 实现BaseEntity。两个实体都有可为空的参数identifier

@Value
@Builder(builderClassName = "Builder")
public class EntityA implements BaseEntity {
    String identifier;
...
}
@Value
@Builder(builderClassName = "Builder")
public class EntityB implements BaseEntity {
    String identifier;
...
}

我也有带有externalId参数的 POJO。该字段值应包含源标识符的 4 个字符的前缀。

@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Pojo {
    private String externalId;
    ...
}

我想将 API 值映射到现有的 POJO PojoEntity,使用ModelMapper. 然而,

  1. 源 getter 和目标 setter 不匹配。
  2. source 的值应该被修改。

我可以在已经映射的 POJO 上设置值事后。

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);
}

但我敢肯定,有一种更优雅的方式来配置模型映射器。
有什么建议么?

标签: javareusabilitymodelmapper

解决方案


推荐阅读