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 {

@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> converters = new ArrayList>();

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 中也可以添加自定义转化器。

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: