Couchbase Converter Spring 混淆 Integer 和 Long 的数据

Couchbase Converter Spring Data confusing Integer with Long

我为 Instant <=> Long 添加了一个 couchbase 转换器,但在读取值时出现错误。

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Integer] to type [java.time.Instant]

我的转换器是这样的

  @WritingConverter
  public enum InstantToLongConverter implements Converter<Instant, Long> {
    INSTANCE;

    public Long convert(Instant source) {
      return source == null ? null : source.getEpochSecond();
    }
  }

  @ReadingConverter
  public enum LongToInstantConverter implements Converter<Long, Instant> {
    INSTANCE;

    @Override
    public Instant convert(Long source) {
      return source == null ? null : Instant.ofEpochSecond(source);
    }
  }

我应该只使用整数吗? 这是一个错误吗?

以下是关于方法重载的内容:

Integer 永远不会绑定到 Long,因为 Integer 和 Long 是不同的对象类型,它们之间没有 IS-A 关系。对于任何两个包装器 类 都是如此。

但是,它可以绑定到 Object,因为 Integer 是一个 Object。

如果您查看 java.lang.Integer 和 java.lang.Long,他们的共同祖先是 java.lang.Number。意思是,Spring 数据不能使用您的转换器 Long <=> Instant 来转换 Integer。

可能的解决方案:

  • 修改您的转换器以转换 Number <=> Instant
  • 创建另一个转换器 Integer <=> Instant