如何将java.time.LocalDate字段映射到Orika?

如何将java.time.LocalDate字段映射到Orika?,java,orika,Java,Orika,发生这种情况是因为LocalDate不是(它没有零参数构造函数) 要解决此问题,您需要创建LocalDateConverter: public class LocalDateConverter extends BidirectionalConverter<LocalDate, LocalDate> { @Override public LocalDate convertTo(LocalDate source, Type<LocalDate> destinatio

发生这种情况是因为LocalDate不是(它没有零参数构造函数)

要解决此问题,您需要创建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);
  }

}
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));
  }

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


发生这种情况是因为LocalDate不是(它没有零参数构造函数)

要解决此问题,您需要创建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);
  }

}
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));
  }

}

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

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

OrikaMapper已在1.5.1版本中修复了此问题。 您可以将依赖项升级到1.5.1,它应该自动添加到那里。 无需添加转换器。 以下是1.5.1的发行说明:

修复的PR:


奥里卡大学
奥里卡岩芯
1.5.1

源对象和目标对象都不是bean,我不知道不可变对象如何使用新值重用,因为它是“不可变的”(不可变对象只是在构造后其状态(对象的数据)无法更改的对象)。您尝试过用PassThroughConverter运行它吗?据我所知,您不希望LocalDate具有新值—您希望目标LocalDate具有与源LocalDate相同的值。因为LocalDate是不可变的,所以您不需要创建新的LocalDate对象来实现这一点-您可以对目标和源使用相同的对象。嗯,没错,我忘记了我的用例。如果有效,您的解决方案更干净。我不知道为什么我写了“return(LocalDate.from(source))”而不是“returnsource”
mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class));
        <dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>1.5.1</version>
        </dependency>