Pet*_*háč 13 java mapping jodatime dozer
我正在使用Dozer在Document类和DocumentManagementBean类之间进行映射,这两个都是我自己制作的.两者都有一个Joda DateTime类型的getter和setter属性,名为dateAdded.
当Document对象d具有property dateAdded= x时,调用mapper.map(d, DocumentManagementBean.class)所有字段都会自动正确映射(因为我可以完全控制代码库,我可以通过没有dozer-config而只依赖于匹配的属性名称),除了dateAdded字段,其中新的DocumentManagementBean 以其属性中dmb的当前 DateTime 结束dateAdded,而不是来自d对象的x .
我期待Dozer试着打电话
dmb.setDateAdded(d.getDateAdded());
并且只是将dateAdded的值从source添加到target,但它似乎是为dmb对象创建新的DateTime然后单独留下它.
有人可以为我解释一下吗?
Sco*_*pio 16
基本问题是Dozer通过新的DateTime()创建一个新的DateTime空白实例,这就是你如何结束当前日期/时间而不是原始日期/时间.可能有多种解决方案,我通常使用全局定义的customconverter:
<converter type="de.kba.resper.customconverter.DateTimeCustomConverter">
<class-a>org.joda.time.DateTime</class-a>
<class-b>org.joda.time.DateTime</class-b>
</converter>
Run Code Online (Sandbox Code Playgroud)
和
public class DateTimeCustomConverter extends DozerConverter<DateTime, DateTime> {
public DateTimeCustomConverter() {
super(DateTime.class, DateTime.class);
}
@Override
public DateTime convertTo(final DateTime source, final DateTime destination) {
if (source == null) {
return null;
}
return new DateTime(source);
}
@Override
public DateTime convertFrom(final DateTime source, final DateTime destination) {
if (source == null) {
return null;
}
return new DateTime(source);
}
}
Run Code Online (Sandbox Code Playgroud)
它可能过头了,但:)
Tha*_*ish 14
您可能不再需要它,但Dozer提供了通过引用复制对象的机会,至少使用最新版本(现在,此版本为5.4.0).通过引用复制是您正在寻找的.
<field copy-by-reference="true">
<a>copyByReference</a>
<b>copyByReferencePrime</b>
</field>
Run Code Online (Sandbox Code Playgroud)
文档:http://dozer.sourceforge.net/documentation/copybyreference.html
在xml文件中设置按引用复制的全局属性
<copy-by-references>
<copy-by-reference>
org.joda.time.LocalDate
</copy-by-reference>
<copy-by-reference>
org.joda.time.LocalDateTime
</copy-by-reference>
</copy-by-references>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5598 次 |
| 最近记录: |