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
我为 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