Converter not found, convert NUMBER to java.time.LocalDateTime
时间: 2025-06-29 14:13:22 浏览: 9
### 解决方案
当遇到 `converter not found` 错误时,这通常意味着应用程序无法找到合适的转换器来将数据库中的 `NUMBER` 类型数据转换为 Java 的 `java.time.LocalDateTime` 对象。为了实现这种类型的转换,可以创建自定义的属性编辑器或使用 Spring 提供的条件转换器。
#### 创建自定义 Converter 实现类
通过实现 `org.springframework.core.convert.converter.Converter<S, T>` 接口并注册到应用上下文中,可以完成此操作:
```java
import org.springframework.core.convert.converter.Converter;
import java.sql.Timestamp;
import java.time.LocalDateTime;
public class NumberToLocalDateTimeConverter implements Converter<Number, LocalDateTime> {
@Override
public LocalDateTime convert(Number source) {
if (source == null) return null;
Timestamp timestamp = new Timestamp(source.longValue());
return timestamp.toLocalDateTime();
}
}
```
#### 注册自定义 Converter 到配置文件中
为了让 Spring 能够识别这个新的转换逻辑,在基于 XML 配置的应用程序里可以通过 `<bean>` 定义该转换器;而在注解驱动的方式下,则可以在某个带有 `@Configuration` 注解的类里面声明它,并将其添加至 `FormattingConversionServiceFactoryBean` 或者更现代的选择是 `WebDataBinderRegistrar`.
对于 Spring Boot 应用来说,推荐的做法是在全局范围内注册这些转换器,即在任意一个 `@Configuration` 类内编写如下代码片段[^3]:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new NumberToLocalDateTimeConverter());
}
}
```
这样做的好处是可以让所有的控制器共享相同的转换规则而无需重复编码。
如果仍然遇到了 `converter not found` 的异常提示,请确认以下几点:
- 自定义转换器已经被正确加载到了 Spring 上下文之中;
- 数据源返回的实际类型确实是一个实现了 `java.lang.Number` 接口的对象(比如 Integer、Long 等),而不是其他形式的时间戳表示法。
阅读全文
相关推荐










