2012-08-02 1 views
1

Как настроить бункер, чтобы он копировал значение только из одного поля в bean a в поле в bean b, если поле bean b равно null? Я использую dsl configБульдозер только копирует, если принимающее поле, отображаемое бином, равно нулю

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 

ответ

2

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