关于spring data redis repository @RedisHash注解的对象上有DateTime属性字段的问题
2024-10-19 23:24:04
当你save保存的时候你会发现出现StackOverflow Exception,很明显出现了无限循环,可是仅仅是一个save操作,哪里来的无限循环呢?
最终发现就是DateTime导致的,因为将对象映射存为Hash会将对象上的每一个属性存为hashkey,而且属性要是基本类型,,看图就知道问题咋来的了,Datetime上的属性是无限嵌套的.
怎么解决?
@WritingConverter
public static class DateTimeToStringConvert implements Converter<DateTime, Map<String, String>> {
@Override
public Map<String, String> convert(DateTime source) {
Map<String, String> data = new HashMap<>();
data.put("value", source.toString());
return data;
}
} @ReadingConverter
public static class StringToDateTimeConvert implements Converter<Map<String, Object>, DateTime> {
@Override
public DateTime convert(Map<String, Object> source) {
if (source.containsKey("value")) {
String dateStr = new String((byte[]) source.get("value"));
return DateTime.parse(dateStr);
}
return null;
}
}
需要自定义write与read的转换器,然后你需要将该注册器注入到spring data和spring data redis的convert中去
@Configuration
static class RedisConvertConfig{ @Autowired
public MappingRedisConverter mappingRedisConverter; @PostConstruct
public void initialConverter() {
ConversionService conversionService = mappingRedisConverter.getConversionService();
mappingRedisConverter.setCustomConversions(customConversions());
if (conversionService instanceof GenericConversionService) {
((GenericConversionService) conversionService).addConverter(new DateTimeStringConvert.DateTimeToStringConvert());
((GenericConversionService) conversionService).addConverter(new DateTimeStringConvert.StringToDateTimeConvert());
}
} public CustomConversions customConversions() {
List<Converter<?, ?>> converterList = new ArrayList<>();
converterList.add(new DateTimeStringConvert.DateTimeToStringConvert());
converterList.add(new DateTimeStringConvert.StringToDateTimeConvert());
return new CustomConversions(converterList);
}
}
最新文章
- 创业方向:O2O及移动社交 from 沈博阳
- IOS开发中常用一下方法
- JAVA定义接口格式:
- Windows 10开启默认网络驱动器访问
- xcrun: error: active developer path (";/Volumes/Xcode/Xcode-beta.app/Contents/Developer";) does not exist, use `xcode-select --swi
- linux 中 ll 命令如何让查询结果按时间升序或降序排序?
- 关于类似(i++)+(++i)
- SQL Server 2016原生支持JSON
- append与after区别
- sql性能
- 解决使用JavaScriptConvert转换对象为Json时,中文和&;符号被转码的问题
- Linux 使用 cp 命令强制覆盖功能
- P1772 [ZJOI2006]物流运输
- Resources$NotFoundException资源文件没有找到
- Python学习:函数式编程(lambda, map() ,reduce() ,filter())
- python爬取糗百内容
- java数据结构之树
- MongoVUE破解
- Python函数变量和返回值
- An unhandled exception of type &#39;System.TypeInitializationException&#39; occurred in System.ServiceModel.dll
热门文章
- 初识python: 属性方法 @property
- vue3.0+vite项目搭建
- vue render中如何正确配置img的路径
- layui type:2 iframe子页面向父页面传值
- 【Python自动化Excel】pandas处理Excel数据的基本流程
- 默认安装的phpMyAdmin会存在哪些安全隐患
- react中引入图片路劲正确但是页面上不显示或者打包后不能正常显示的问题
- 【Java】toString
- 链式printf()函数的用法
- netty系列之:好马配好鞍,为channel选择配套的selector