如何使用Orika映射java.time.LocalDate字段?

时间:2015-06-12 14:37:12

标签: java orika

这是因为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());

作为快捷方式,您可以注册提供的&#34; PassThroughConverter&#34;正如Adam Michalik所建议的那样,Orika并没有尝试实现一个新的&#34; LocalDate&#34; :

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

3 个答案:

答案 0 :(得分:16)

更好的是,由于LocalDate是不可变的,因此在源和目标bean中使用相同的对象没有任何害处。您可以按如下方式配置MapperFactory

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

答案 1 :(得分: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());

答案 2 :(得分:0)

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

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

        <dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>1.5.1</version>
        </dependency>