一、背景
项目组在使用mongo时,报类型转换错误,具体报错如下:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.types.Decimal128] to type [java.math.BigDecimal]
二、原因
原因是 MongoDB 的 Decimal128 类型无法转换成 Java 的 BigDecimal 类型导致
三、解决办法
可以通过在配置文件中添加以下内容注册转换器:
配置 Decimal128 转 BigDecimal 的转换器 Decimal128ToBigDecimalConverter
@ReadingConverter
public class Decimal128ToBigDecimalConverter implements Converter<Decimal128, BigDecimal> {
@Override
public BigDecimal convert(Decimal128 decimal128) {
return decimal128.bigDecimalValue();
}
}
配置 BigDecimal 转 Decimal128 的转换器 BigDecimalToDecimal128Converter
@WritingConverter
public class BigDecimalToDecimal128Converter implements Converter<BigDecimal, Decimal128> {
@Override
public Decimal128 convert(BigDecimal bigDecimal) {
return new Decimal128(bigDecimal);
}
}
最后配置下 MongoCustomConversions,MongoCustomConversions 是 Spring Data MongoDB 中的一个类,它用于自定义 MongoDB 数据类型和 Java 对象之间的转换
@Configuration
public class MongoConvertConfig {
@Bean
public MongoCustomConversions mongoCustomConversions() {
List<Converter<?, ?>> converterList = new ArrayList<>();
converterList.add(new BigDecimalToDecimal128Converter());
converterList.add(new Decimal128ToBigDecimalConverter());
return new MongoCustomConversions(converterList);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154482.html