溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring?boot整合mongo查詢converter異常的方法

發布時間:2022-03-06 13:38:48 來源:億速云 閱讀:942 作者:iii 欄目:開發技術

這篇文章主要講解了“spring boot整合mongo查詢converter異常的方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“spring boot整合mongo查詢converter異常的方法”吧!

前言

使用過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,來解決問題

自定義轉換器

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));//去掉默認mapper添加的_class
        mappingConverter.setCustomConversions(conversions);//添加自定義的轉換器
        return mappingConverter;
    }
    @Bean
    public CustomConversions customConversions() {
        List list = new ArrayList();
        list.add(new TimestampConverter());
        return new CustomConversions(list);
    }
}

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

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

spring?boot整合mongo查詢converter異常的方法

感謝各位的閱讀,以上就是“spring boot整合mongo查詢converter異常的方法”的內容了,經過本文的學習后,相信大家對spring boot整合mongo查詢converter異常的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女