Couchbase转换器Spring数据将整数与Long混淆

时间:2017-04-13 15:21:45

标签: java spring spring-data couchbase

我为Instant< =>添加了一个沙发基地转换器Long但我在阅读该值时遇到错误。

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吗? 这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

如果你看一下java.lang.Integer和java.lang.Long,它们的共同祖先就是java.lang.Number。意思是,您的转换器Long&lt; =&gt; Spring数据不能使用Instant来转换整数。

可能的解决方案:

  • 修改您的转换器以转换数字&lt; =&gt;即时
  • 创建另一个转换器整数&lt; =&gt;即时

答案 1 :(得分:-1)

以下是方法重载:

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

但是,它可以绑定到Object,因为它是Integer IS-A Object。