spring boot整合mongo查询converter异常的方法
导读:本文共1586字符,通常情况下阅读需要5分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 前言使用过spring boot的人都知道spring boot约定优于配置的理念给我们开发中集成相关技术框架提供了很多的便利,集成mongo也是相当的简单,但是通过约定的配置信息来集成mongo有些问题。当你的字段包含Timestamp这种类型时,读取数据的时候会抛一个类型转换的异常,如No converter found capable of convert... ...
目录
(为您整理了一些要点),点击可以直达。前言
使用过spring boot的人都知道spring boot约定优于配置的理念给我们开发中集成相关技术框架提供了很多的便利,集成mongo也是相当的简单,但是通过约定的配置信息来集成mongo有些问题。
当你的字段包含Timestamp这种类型时,读取数据的时候会抛一个类型转换的异常,如
No converter found capable of converting from type [java.util.Date] to type [java.sql.Timestamp]
是因为,mongo本身时间类型为Date,在做结果映射的时候Date并不能强转成Timestamp,这是其中的一个点,当然还有很多类似的数据转换问题可以通过这个举一反三的来解决。
所以,我们需要自定义的转换器,而spring boot约定的MongoProperties并没有配置转换器一项,我们不能简单的通过application.properties来达到我们的配置。
下面我们通过java bean的方式补充配置我们的带自定义转换器的MongoTemplate,来解决问题
自定义转换器
importorg.springframework.core.convert.converter.Converter;importjava.sql.Timestamp;importjava.util.Date;publicclassTimestampConverterimplementsConverter{publicTimestampconvert(Datedate){if(date!=null){returnnewTimestamp(date.getTime());}returnnull;}}
java bean的方式配置MongoTemplate
/***Createdbyklon2017/3/22.*Content:mongodb的MongoTemplate配置*/@ConfigurationpublicclassMongoDBConfig{@BeanpublicMongoTemplategetMongoTemplate(MongoDbFactorydbFactory,MappingMongoConverterconverter){MongoTemplatetemplate=newMongoTemplate(dbFactory,converter);returntemplate;}@BeanpublicMappingMongoConvertermappingMongoConverter(MongoDbFactoryfactory,MongoMappingContextcontext,BeanFactorybeanFactory,CustomConversionsconversions){DbRefResolverdbRefResolver=newDefaultDbRefResolver(factory);MappingMongoConvertermappingConverter=newMappingMongoConverter(dbRefResolver,context);mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));mappingConverter.setTypeMapper(newDefaultMongoTypeMapper(null));//去掉默认mapper添加的_classmappingConverter.setCustomConversions(conversions);//添加自定义的转换器returnmappingConverter;}@BeanpublicCustomConversionscustomConversions(){Listlist=newArrayList();list.add(newTimestampConverter());returnnewCustomConversions(list);}}
ps:默认的mongo类型映射会把我们的class全路径名添加到我们的mongdb的_class字段,如下图所示,主要是为了查询结果子类型的映射。
如果我们并不需要,可以通过构造DefaultMongoTypeMapper传空的方式去掉
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
spring boot整合mongo查询converter异常的方法的详细内容,希望对您有所帮助,信息来源于网络。