最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

所以,我們需要自定義的轉(zhuǎn)換器,而spring boot約定的MongoProperties并沒有配置轉(zhuǎ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類型映射會把我們的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的方式需要我們對spring-data-mongo的api有深入的了解,當(dāng)然,你可以說spring boot可以直接加載xml的配置,但是,既然用了spring boot,就推薦使用@Configuration這種方式解決問題哈,所以,分享一個博主的經(jīng)驗,遇到類似的問題而搜遍網(wǎng)絡(luò)無果時,推薦一種解決的方式,官方文檔+源碼閱讀,不僅能解決問題還能發(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異常的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解Spring MVC概要與環(huán)境配置

    深入理解Spring MVC概要與環(huán)境配置

    本篇文章主要介紹了深入理解Spring MVC概要與環(huán)境配置 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Java使用JDBC連接postgresql數(shù)據(jù)庫示例

    Java使用JDBC連接postgresql數(shù)據(jù)庫示例

    這篇文章主要介紹了Java使用JDBC連接postgresql數(shù)據(jù)庫,結(jié)合實例形式分析了jdbc連接postgresql數(shù)據(jù)庫及數(shù)值插入、更新、查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Spring Bean的生命周期詳細(xì)介紹

    Spring Bean的生命周期詳細(xì)介紹

    這篇文章主要介紹了Spring Bean的生命周期的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 流讀取導(dǎo)致StringBuilder.toString()亂碼的問題及解決

    流讀取導(dǎo)致StringBuilder.toString()亂碼的問題及解決

    這篇文章主要介紹了流讀取導(dǎo)致StringBuilder.toString()亂碼的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 如何使用SpringBoot集成Kafka實現(xiàn)用戶數(shù)據(jù)變更后發(fā)送消息

    如何使用SpringBoot集成Kafka實現(xiàn)用戶數(shù)據(jù)變更后發(fā)送消息

    Spring Boot集成Kafka實現(xiàn)用戶數(shù)據(jù)變更后,向其他廠商發(fā)送消息,我們需要考慮配置Kafka連接、創(chuàng)建Kafka Producer發(fā)送消息、監(jiān)聽用戶數(shù)據(jù)變更事件,并將事件轉(zhuǎn)發(fā)到Kafka,本文分步驟給大家講解使用SpringBoot集成Kafka實現(xiàn)用戶數(shù)據(jù)變更后發(fā)送消息,感興趣的朋友一起看看吧
    2024-07-07
  • Java中Lambda表達(dá)式和函數(shù)式接口的使用和特性

    Java中Lambda表達(dá)式和函數(shù)式接口的使用和特性

    Java Lambda表達(dá)式是一種函數(shù)式編程的特性,可簡化匿名內(nèi)部類的寫法,與函數(shù)式接口搭配使用,實現(xiàn)代碼簡潔、可讀性高、易于維護(hù)的特點(diǎn),適用于集合操作、多線程編程等場景
    2023-04-04
  • SSH框架網(wǎng)上商城項目第16戰(zhàn)之Hibernate二級緩存處理首頁熱門顯示

    SSH框架網(wǎng)上商城項目第16戰(zhàn)之Hibernate二級緩存處理首頁熱門顯示

    這篇文章主要介紹了SSH框架網(wǎng)上商城項目第16戰(zhàn)之Hibernate的二級緩存處理首頁的熱門顯示,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java注解Annotaton詳解

    Java注解Annotaton詳解

    Java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制,文中給大家介紹了三種基本的Annotaton,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-05-05
  • Java分頁工具類及其使用(示例分享)

    Java分頁工具類及其使用(示例分享)

    本篇文章主要分享了Java分頁工具類及其使用的示例代碼,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 解決DataOutputStream亂碼的問題

    解決DataOutputStream亂碼的問題

    這篇文章主要介紹了DataOutputStream亂碼問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

繁昌县| 府谷县| 交城县| 建湖县| 怀仁县| 宁津县| 罗山县| 葵青区| 涿鹿县| 本溪市| 昌平区| 班玛县| 策勒县| 昌吉市| 平谷区| 平南县| 平安县| 陕西省| 肃宁县| 永平县| 资中县| 高平市| 丰城市| 桦川县| 宁城县| 浏阳市| 武义县| 阿拉善左旗| 阿城市| 河西区| 凉城县| 胶南市| 奇台县| 灵石县| 亳州市| 措美县| 霍山县| 马鞍山市| 福贡县| 玉屏| 门头沟区|