10

这是因为 LocalDate 不是JavaBean(它没有零参数构造函数)

要解决此问题,您需要创建一个 LocalDateConverter :

public class LocalDateConverter extends BidirectionalConverter<LocalDate, LocalDate> {

  @Override
  public LocalDate convertTo(LocalDate source, Type<LocalDate> destinationType) {
    return (source);
  }

  @Override
  public LocalDate convertFrom(LocalDate source, Type<LocalDate> destinationType) {
    return (source);
  }

}

然后注册它添加这一行:

mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter());

作为快捷方式,您可以按照 Adam Michalik 的建议注册提供的“PassThroughConverter”,这样 Orika 就不会尝试实例化新的“LocalDate”:

mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class));
4

3 回答 3

17

更好的是,因为LocalDate它是不可变的,所以在源 bean 和目标 bean 中使用相同的对象并没有什么坏处。您可以配置MapperFactory如下:

mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class));
于 2015-08-31T10:31:46.080 回答
9

这是因为 LocalDate 不是JavaBean(它没有零参数构造函数)

要解决此问题,您需要创建一个 LocalDateConverter :

public class LocalDateConverter extends BidirectionalConverter<LocalDate, LocalDate> {

  @Override
  public LocalDate convertTo(LocalDate source, Type<LocalDate> destinationType) {
    return (LocalDate.from(source));
  }

  @Override
  public LocalDate convertFrom(LocalDate source, Type<LocalDate> destinationType) {
    return (LocalDate.from(source));
  }

}

然后注册它添加这一行:

mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter());
于 2015-06-12T14:37:11.993 回答
1

OrikaMapper 在 1.5.1 版本中修复了这个问题。您可以将依赖项升级到 1.5.1,它应该会自动添加到那里。无需添加转换器。以下是 1.5.1 的发行说明: https ://github.com/orika-mapper/orika/issues/179

修复 PR: https ://github.com/orika-mapper/orika/pull/178

        <dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>1.5.1</version>
        </dependency>
于 2021-06-15T11:00:01.033 回答