Dozer: сопоставление уровня поля String-To-Date для списка

Я хочу сопоставить DTO (все типы данных String) с VO (содержит String, int, boolean, Date)

StudentDTO

private StudentDetailDTO student;

StudentDetailDTO:

private String sid;
private String name;
private String createDt;
private String studentInd;
private List<FeeReceiptDTO> feeDetails;

FeeReceiptDTO:

private String semisterNum;
private String feeAmount;
private String paidOn;

StudentDetailVO :

private int sid;
private String name;
private Date createDt;
private boolean studentInd;
private List<FeeReceiptVO> feeDetails;

Квитанция об оплате VO:

private int semisterNum;
private Double feeAmount;
private Date paidOn;

Я использую DOZZER для сопоставления своего DTO с VO String-to-Date-DozzerMapping

DozzerMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">

    <mapping date-format="MM/dd/yyyy HH:mm" map-null="true" map-empty-string="true" wildcard="true" type="one-way" >
        <class-a>com.college.student.dto.StudentDTO</class-a>
        <class-b>com.college.student.vo.StudentVO</class-b>
        <field>
            <a>student.sid</a>
            <b>sid</b>
        </field>
        <field>
            <a>student.name</a>
            <b>name</b>
        </field>
        <field>
            <a>student.createDt</a>
            <b>createDt</b>
        </field>
        <field>
            <a>student.studentInd</a>
            <b>studentInd</b>
        </field>
        <field>
            <a date-format="MM/dd/yyyy HH:mm">student.feeDetails</a>
            <b>feeDetails</b>
        </field>

    </mapping>
</mappings>

Но дата в FeeDetails, т. е. paidOn, не может форматироваться из строки в дату.

Я делаю что-то неправильно?

Нужно ли мне писать CustomStringToDateConvertor только для этого поля paidOn?

Журнал ошибок:

ERROR [org.dozer.MappingProcessor] (http-localhost-127.0.0.1-9090-1) Field mapping error -->
  MapId: null
  Type: null
  Source parent class: com.college.student.dto.StudentDTO
  Source field name: paidOn
  Source field type: class java.lang.String
  Source field value: 01/01/2015 01:01
  Dest parent class: com.college.student.vo.StudentVO
  Dest field name: paidOn
  Dest field type: java.util.Date: org.dozer.converters.ConversionException: Unable to determine time in millis of source object
    at org.dozer.converters.DateConverter.convert(DateConverter.java:81) [dozer-5.4.0.jar:]
    at org.dozer.converters.PrimitiveOrWrapperConverter.convert(PrimitiveOrWrapperConverter.java:70) [dozer-5.4.0.jar:]

Я попытался отладить и обнаружил, что dateFormat для этой даты идет как null в преобразователе дат Dozzer org.dozer.converters.DateConvertor

Я определил date-format в field-level, но это не действует для List объектов.

Есть ли другой способ сделать это?


person 09Q71AO534    schedule 09.01.2015    source источник
comment
Правильно ли это объявление уровня поля <field> <a date-format="MM/dd/yyyy HH:mm">student.feeDetails</a> <b>feeDetails</b> </field> - будет ли бульдозер использовать этот формат даты, оба из них util.List   -  person 09Q71AO534    schedule 09.01.2015


Ответы (1)


Так как Dozer не может конвертировать String-To-Date - At Field Level Mapping for a List.

Я определил новое сопоставление для списка, т.е. рассматривая его как Object

Я изменил DozerMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">

<mapping date-format="MM/dd/yyyy HH:mm" map-null="true" map-empty-string="true" wildcard="true" type="one-way" >
        <class-a>com.college.student.dto.FeeReceiptDTO</class-a>
        <class-b>com.college.student.vo.FeeReceiptVO</class-b>
</mapping>

    <mapping date-format="MM/dd/yyyy HH:mm" map-null="true" map-empty-string="true" wildcard="true" type="one-way" >
        <class-a>com.college.student.dto.StudentDTO</class-a>
        <class-b>com.college.student.vo.StudentVO</class-b>
        <field>
            <a>student.sid</a>
            <b>sid</b>
        </field>
        <field>
            <a>student.name</a>
            <b>name</b>
        </field>
        <field>
            <a>student.createDt</a>
            <b>createDt</b>
        </field>
        <field>
            <a>student.studentInd</a>
            <b>studentInd</b>
        </field>
        <field>
            <a>student.feeDetails</a>
            <b>feeDetails</b>
        </field>

    </mapping>
</mappings>
person 09Q71AO534    schedule 14.01.2015