java.lang.Date(作为映射字段)到XMLGregorianCalendar的Dozer映射
我定义了一个xml映射: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="myDateField">this</a> <b>myXMLGrego
<mapping>
<class-a>java.util.HashMap</class-a>
<class-b>com.example.MyClass</class-b>
<field>
<a key="myDateField">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>