Spring Boot 集成 MongoDB读取数据出现Failed to convert from type [java.lang.String] to type [java.util.Date]

Spring Boot 集成 MongoDB 读取数据出现Failed to convert from type [java.lang.String] to type [java.util.Date] 解决方法

前几天在公司的业务系统fat 环境有些列表报错,测试找到我帮忙看下发现列表 会去查询MongoDB中的数据 elk 报错 org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2022-10-22 12:21:21'; nested exception is java.lang.IllegalArgumentException 这个就是MongoDB弱类型导致的 可能是有用户很老的数据存在格式问题导致 spring model 映射不上 ,解决这个就又2个方法 1是找出这些数据删除 2是为MongoDB添加一个转化器 ,我选择转化器 删除旧数据治标不治本开搞。

添加一个spring Converter转化器 string 转 date

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = formatter.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

注册到mongoTemplate 中

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;

import java.util.ArrayList;
import java.util.List;

// 该类的目的是把自定义编写的转换类 注入 MongoTemplate 中
@Configuration
public class MongoConfig {

    @Autowired
    MongoDatabaseFactory factory;

    //MongoCustomConversions
    @Bean //注册客制化转换 添加自定义转换类(楼主以TestConverter为列,具体编写跳转“编写自定义转换类”)
    public MongoCustomConversions customConversions() {

        List<Converter<?,?>> converters = new ArrayList<Converter<?,?>>();

        converters.add(new DateConverter());

        return new MongoCustomConversions(converters);
    }

    @Bean
    public MongoTemplate mongoTemplate() {

        MongoTemplate mongoTemplate = new MongoTemplate(factory);
        MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
        mongoMapping.setCustomConversions(customConversions()); // tell mongodb to use the custom converters
        mongoMapping.afterPropertiesSet();
        System.out.println("注入成功!");
        return mongoTemplate;

    }

}

这样就可以解决 Failed to convert from type [java.lang.String] to type [java.util.Date] 问题 spring 的Converter 类很强大 在spring mvc 中也可以添加自定义转化器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值