代码之家  ›  专栏  ›  技术社区  ›  chrislovecnm

Dozer仅在接收bean映射字段为空时进行复制

  •  1
  • chrislovecnm  · 技术社区  · 14 年前

    如果bean b中的字段为null,我如何配置Dozer,使其仅将值从bean a中的一个字段复制到bean b中一个字段?我正在使用dsl配置

    mapping(FirstGivingPayloadV1.Payload.class, Nonprofit.class, oneWay(),
            mapNull(false), mapId("firstGivingPayloadV1"))
            .fields("latitude", "latitude")
            .fields("longitude", "longitude")
            .fields("revoked", "isNonProfitStatusVerified");
            .fields("url", "websiteUrl"); // only copy url if webSiteURL == null or is empty
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   michal777    14 年前

    为此字段转换编写一个自定义转换器。自定义转换器应检查bean中的字段 b 为null,如果是复制字段 a 对它。

    根据推土机文件:

    在下面的示例中,Dozer将调用自定义转换器来执行字段映射。

    <mapping>
      <class-a>org.dozer.vo.SimpleObj</class-a>
      <class-b>org.dozer.vo.SimpleObjPrime2</class-b>    
      <field custom-converter-id="CustomConverterWithId">
        <a>field1</a>
        <b>field1Prime</b>
      </field>
    </mapping>  
    

    在自定义转换器中,您可以访问目标对象,并且可以检查它是否为null,请查看 convert 方法签名:

    public class TestCustomConverter implements CustomConverter {
     public Object convert(Object destination, Object source, Class destClass, Class sourceClass) {...