Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.Date(作为映射字段)到XMLGregorianCalendar的Dozer映射_Java_Date_Map_Dozer - Fatal编程技术网

java.lang.Date(作为映射字段)到XMLGregorianCalendar的Dozer映射

java.lang.Date(作为映射字段)到XMLGregorianCalendar的Dozer映射,java,date,map,dozer,Java,Date,Map,Dozer,我定义了一个xml映射: <mapping> <class-a>java.util.HashMap</class-a> <class-b>com.example.MyClass</class-b> <field> <a key=&quot;myDateField&quot;>this</a> <b>myXMLGrego

我定义了一个xml映射:

<mapping>
    <class-a>java.util.HashMap</class-a>
    <class-b>com.example.MyClass</class-b>
    <field>
        <a key=&quot;myDateField&quot;>this</a>
        <b>myXMLGregorianCalendarField</b>
    </field>
</mapping>
如何使此转换正常工作?

注意
长时间的调试表明,对于映射和“非映射”,对基元转换器的调用是不同的。因此,第二个问题来了:为什么?我不确定您在上一节中的意思,但您可以尝试在目标类中使用自定义setter来执行此映射

您的映射文件如下所示:

<mapping>
    <class-a>java.util.HashMap</class-a>
    <class-b>com.example.MyClass</class-b>
    <field>
        <a key="myDateField">this</a>
        <b set-method="setMyXMLGregorianCalendarField(java.util.Date)">myXMLGregorianCalendarField</b>
    </field>
</mapping>

java.util.HashMap
com.example.MyClass

.

您可以尝试使用提示标记将日期隐式转换为公历

下面是一个示例代码:

<field> <a key="myDateField">this</a> <b>myXMLGregorianCalendarField</b> <a-hint>java.util.GregorianCalendar</a-hint> </field> <field> <a key=“myDateField”>此</a> <b>myXMLGregorianCalendarField</b> <a-hint>java.util.GregorianCalendar</a-hint> </字段> 我不知道dozer是否支持隐式类型转换,但如果它支持隐式类型转换,那么就不需要编写任何exta自定义转换器方法。 若它不执行隐式转换,请尝试自定义getter或setter方法。 在其中执行从日期到日历的转换。
有关自定义getter和setter方法,请参见以下内容:

Oops,我在这里找到了答案,


下面,查看数据类型转换标题中的最后三个选项。他们编写了无需任何自定义转换器帮助即可进行内部映射的代码:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp、java.util.Calendar、java.util.GregorianCalendar

您是说当
Date
不是映射字段时转换工作吗?是的,您答对了。当
Date
不是
Map
字段时,转换工作正常。1)没有方法
com.example.MyClass#setMyXMLGregorianCalendarField(java.util.Date)
可用。只有
com.example.MyClass#setMyXMLGregorianCalendarField(javax.xml.datatype.XMLGregorianCalendar)
存在。2) 推土机随附
xmlgoriiancalendarconverter
,如果源对象(由
标记定义)不是
Map
的任何实例,该转换器工作正常。我假设
MyClass
是您的类。您的另一个选择是实现一个自定义转换器,如所述扩展
DozerConverter
类。当然,实现另一个自定义转换器是进行此转换的最简单(也是最明显)的方法,但我不想重新发明轮子。推土机已经有这样的转换器内置,所以我想重用它。无论如何,谢谢你的帮助!我同意。遗憾的是,
XMLGregorianCalendarConverter
没有为这种情况扩展
DozerConverter
类。如果我的回答对你有帮助,请接受:)我最近查过了。它将日期隐式转换为xmlgregoriancalander。所以我认为,您需要任何自定义转换器。 <field> <a key="myDateField">this</a> <b>myXMLGregorianCalendarField</b> <a-hint>java.util.GregorianCalendar</a-hint> </field>