Dozer копирует только в том случае, если принимающее поле bean mapped имеет значение null

Как настроить Dozer так, чтобы он копировал значение только из одного поля в bean-компоненте a в поле в bean-компоненте b, если поле в bean-компоненте b равно null? Я использую конфигурацию 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

person chrislovecnm    schedule 02.08.2012    source источник


Ответы (1)


Напишите собственный преобразователь для преобразования этого поля. Пользовательский преобразователь должен проверять, является ли поле в bean-компоненте b пустым, и копирует ли оно поле 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>  

В пользовательском конвертере у вас есть доступ к целевому объекту, и вы можете проверить, является ли он нулевым, посмотрите на сигнатуру метода convert:

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