有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java推土机不调用我的自定义转换器

无论我做什么,推土机都不会给我的CustomConverter打电话。我试图设置断点,但没有调用任何CustomerConverter代码。对象正在转换,除了链接到CustomConverter的字段外,所有字段都在工作

在我的dozerBeanMapping.xml文件中,我有:

<configuration>
    <custom-converters>
        <converter type="converter.JodaDateToJavaDateConverter">
            <class-a>org.joda.time.LocalDate</class-a>
            <class-b>java.util.Date</class-b>
        </converter>
    </custom-converters>
</configuration>
<mapping type="one-way">
    <class-a>data.SourceObject</class-a>
    <class-b>data.DestinationObject</class-b>
    <field custom-converter="converter.JodaDateToJavaDateConverter">
        <a>myLocalDate</a>
        <b>myJavaDate</b>
    </field>
</mapping>

对于转换器,我有:

package converter;
public class JodaDateToJavaDateConverter implements CustomConverter
{
    @Override
    public Object convert(Object destination, Object source, Class<?> destinationClass, Class<?> sourceClass)
    {
        if(source == null) 
            return null;
        if(!(source instanceof LocalDate)) 
            throw new MappingException("Misconfigured/unsupported mapping");
        return ((LocalDate)source).toDateTimeAtStartOfDay().toDate();
    }
}

对于我拥有的对象:

package data;
public class SourceObject
{
    private LocalDate myLocalDate = LocalDate.now();

    public void setMyLocalDate(LocalDate myLocalDate) { this.myLocalDate = myLocalDate; }
    public LocalDate getMyLocalDate() { return myLocalDate; }
}

package data;
public class DestinationObject
{
    private Date myJavaDate;

    public void setMyJavaDate(Date myJavaDate) { this.myJavaDate = myJavaDate; }
    public Date getMyJavaDate() { return myJavaDate; }
}

我不认为这有什么区别,但以下是开始这一切的代码:

SourceObject mySourceObject = DozerBeanMapperSingletonWrapper.getInstance().map(DestinationObject, SourceObject.class);

我不知道为什么我的自定义转换器不被称为

更新:我现在更困惑了。如果目标和源对象的字段名称相同,则一切正常。无论出于什么原因,我都无法映射具有不同名称的字段


共 (1) 个答案

  1. # 1 楼答案

    在映射调用中,您将DestinationObject映射到SourceObject,而在dozerBeanMapping.xml中,您指定您的自定义转换器仅在将SourceObject映射到DestinationObject时使用,而不是反过来使用(由于type=one-way

    当您使用相同的字段名时,常规配置将变为活动状态,其中您指定使用自定义转换器将每个org.joda.time.LocalDate映射到一个java.util.Date(反之亦然)