亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

spring?boot整合mongo查詢converter異常排查記錄

 更新時(shí)間:2022年03月05日 15:54:45   作者:kl  
這篇文章主要為大家介紹了spring?boot整合mongo查詢時(shí)拋出converter異常的排查解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助

前言

使用過spring boot的人都知道spring boot約定優(yōu)于配置的理念給我們開發(fā)中集成相關(guān)技術(shù)框架提供了很多的便利,集成mongo也是相當(dāng)?shù)暮?jiǎn)單,但是通過約定的配置信息來集成mongo有些問題。

當(dāng)你的字段包含Timestamp這種類型時(shí),讀取數(shù)據(jù)的時(shí)候會(huì)拋一個(gè)類型轉(zhuǎn)換的異常,如

No converter found capable of converting from type [java.util.Date] to type [java.sql.Timestamp]

是因?yàn)?,mongo本身時(shí)間類型為Date,在做結(jié)果映射的時(shí)候Date并不能強(qiáng)轉(zhuǎn)成Timestamp,這是其中的一個(gè)點(diǎn),當(dāng)然還有很多類似的數(shù)據(jù)轉(zhuǎn)換問題可以通過這個(gè)舉一反三的來解決。

所以,我們需要自定義的轉(zhuǎn)換器,而spring boot約定的MongoProperties并沒有配置轉(zhuǎn)換器一項(xiàng),我們不能簡(jiǎn)單的通過application.properties來達(dá)到我們的配置。

下面我們通過java bean的方式補(bǔ)充配置我們的帶自定義轉(zhuǎn)換器的MongoTemplate,來解決問題

自定義轉(zhuǎn)換器

import org.springframework.core.convert.converter.Converter;
import java.sql.Timestamp;
import java.util.Date;
public class TimestampConverter implements Converter {
    public Timestamp convert(Date date) {
        if(date != null){
            return new Timestamp(date.getTime());
        }
        return null;
    }
}

java bean的方式配置MongoTemplate

/**
 * Created by kl on 2017/3/22.
 * Content :mongodb的MongoTemplate配置
 */
@Configuration
public class MongoDBConfig {
    @Bean
    public MongoTemplate getMongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) {
        MongoTemplate template = new MongoTemplate(dbFactory, converter);
        return template;
    }
    @Bean
    public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory,CustomConversions conversions) {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
        mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
        mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));//去掉默認(rèn)mapper添加的_class
        mappingConverter.setCustomConversions(conversions);//添加自定義的轉(zhuǎn)換器
        return mappingConverter;
    }
    @Bean
    public CustomConversions customConversions() {
        List list = new ArrayList();
        list.add(new TimestampConverter());
        return new CustomConversions(list);
    }
}

ps:默認(rèn)的mongo類型映射會(huì)把我們的class全路徑名添加到我們的mongdb的_class字段,如下圖所示,主要是為了查詢結(jié)果子類型的映射。

如果我們并不需要,可以通過構(gòu)造DefaultMongoTypeMapper傳空的方式去掉

后記:

網(wǎng)上大多數(shù)的講spring boot集成mongo的博文都類似官方的simple example,其他的都是spring通過xml的方式集成mongo的,有談到轉(zhuǎn)換器的問題,但是把xml的方式轉(zhuǎn)換到spring boot的java bean config的方式需要我們對(duì)spring-data-mongo的api有深入的了解,當(dāng)然,你可以說spring boot可以直接加載xml的配置,但是,既然用了spring boot,就推薦使用@Configuration這種方式解決問題哈,所以,分享一個(gè)博主的經(jīng)驗(yàn),遇到類似的問題而搜遍網(wǎng)絡(luò)無果時(shí),推薦一種解決的方式,官方文檔+源碼閱讀,不僅能解決問題還能發(fā)現(xiàn)更多你不增了解的東西

官方文檔:https://docs.spring.io/spring-data/data-mongo/docs/2.0.0.M1/reference/html/

以上就是spring boot整合mongo查詢converter異常排查記錄的詳細(xì)內(nèi)容,更多關(guān)于spring boot mongo查詢converter異常的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java8并行流中自定義線程池操作示例

    Java8并行流中自定義線程池操作示例

    這篇文章主要介紹了Java8并行流中自定義線程池操作,結(jié)合實(shí)例形式分析了并行流的相關(guān)概念、定義及自定義線程池的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • Java 坐標(biāo)系相互轉(zhuǎn)換方式

    Java 坐標(biāo)系相互轉(zhuǎn)換方式

    這篇文章主要介紹了Java中的坐標(biāo)系相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • SpringBoot 中使用RabbtiMq?詳解

    SpringBoot 中使用RabbtiMq?詳解

    這篇文章主要介紹了SpringBoot 中使用RabbtiMq詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • springboot下配置多數(shù)據(jù)源的方法

    springboot下配置多數(shù)據(jù)源的方法

    本篇文章主要介紹了springboot下配置多數(shù)據(jù)源的方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-04-04
  • springboot?log4j2.xml如何讀取application.yml中屬性值

    springboot?log4j2.xml如何讀取application.yml中屬性值

    這篇文章主要介紹了springboot?log4j2.xml如何讀取application.yml中屬性值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java生成指定范圍的隨機(jī)日期

    java生成指定范圍的隨機(jī)日期

    這篇文章主要為大家詳細(xì)介紹了java生成指定范圍的隨機(jī)日期,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • swing中Tree與滾動(dòng)條用法實(shí)例分析

    swing中Tree與滾動(dòng)條用法實(shí)例分析

    這篇文章主要介紹了swing中Tree與滾動(dòng)條用法,以實(shí)例形式分析了java基于swing實(shí)現(xiàn)圖形界面的使用技巧,需要的朋友可以參考下
    2015-09-09
  • SpringBoot集成Validation參數(shù)校驗(yàn)

    SpringBoot集成Validation參數(shù)校驗(yàn)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成Validation參數(shù)校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java實(shí)現(xiàn)為Word每一頁設(shè)置不同圖片水印的效果

    Java實(shí)現(xiàn)為Word每一頁設(shè)置不同圖片水印的效果

    Word中設(shè)置水印時(shí),可加載圖片設(shè)置為水印效果,但通常添加水印效果時(shí),會(huì)對(duì)所有頁面都設(shè)置成統(tǒng)一效果。所以本文為大家介紹了一個(gè)方法,可以實(shí)現(xiàn)對(duì)每一頁或者某個(gè)頁面設(shè)置不同的水印效果,需要的可以參考一下
    2022-02-02
  • SpringBoot如何從配置文件中讀取配置參數(shù)

    SpringBoot如何從配置文件中讀取配置參數(shù)

    這篇文章主要介紹了SpringBoot如何從配置文件中讀取配置參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論