2

尝试映射日期-> 日历时出现 InstantiationException。

简单测试如下:

    @Test
    public void testConversion()
    {
        GregorianCalendar cal = new GregorianCalendar(2009, 2, 3);
        Date sourceValue = cal.getTime();
        DozerBeanMapper mapper = new DozerBeanMapper();
        Object result = mapper.map(sourceValue, Calendar.class);
    }

根据文档,这是开箱即用的支持(即使 Calendar 是抽象的)。任何人都有这方面的经验并能够指出我做错了什么?

4

2 回答 2

2

你说的对。这会抛出InstantionException(我认为这是推土机中的一个错误。你会把它归档到他们的错误跟踪系统中吗?)。

然而。当您转换不在根级别的日期 <--> 日历值时,它可以工作。这个测试对我有用(推土机 5.1):

    public static class Source {
        private Date value;
        public void setValue(Date value) {
            this.value = value;
        }
        public Date getValue() {
            return value;
        }
    }

    public static class Target {
        private Calendar value;
        public void setValue(Calendar value) {
            this.value = value;
        }
        public Calendar getValue() {
            return value;
        }
    }


    @Test
    public void testConversion()
    {
        final GregorianCalendar cal = new GregorianCalendar(2009, 2, 3);
        Source source = new Source(){{ setValue(cal.getTime());}};

        DozerBeanMapper mapper = new DozerBeanMapper();
        Target result = (Target) mapper.map(source, Target.class);
        assertEquals(cal.getTimeInMillis(), result.getValue().getTimeInMillis());
    }
于 2009-09-08T20:15:14.123 回答
1

如果您将 Calendar.class 更改为 GregorianCalendar.class,则测试有效。

于 2009-09-08T20:23:45.510 回答