Unable to serialize JobDataMap for insertion into database borg.apache.catalina.core.ApplicationPart

Unable to serialize JobDataMap for insertion into database borg.apache.catalina.core.ApplicationPart_第1张图片​​​​​​​

目录

报错

问题描述

问题分析

问题解决


报错

Unable to serialize JobDataMap for insertion into database because the value
org.apache.catalina.core.ApplicationPart

问题描述

我使用了JobDataMap用来传递参数,

JobDataMap jobDataMap=new JobDataMap();
jobDataMap.put("email",sendEmailDto);

但是sendEmailDto已经进行了序列化,但还是一直报错。

问题分析

我进行了试错分析,当我把sendEmailDto实现序列化去掉之后,报错变成了前面那一段报错信息不变,后面的类变成了我的dto类的名字。

这是传递的参数对象加了序列化的样子:

于是我开始分析报错的这个类,org.apache.catalina.core.ApplicationPart。

org.apache.catalina.core.ApplicationPart类属于org.apache.catalina.core包等等等。。。

看了个寂寞。。。

之后再看数据存储这一块儿,没有序列化也就是说有可能是其中某个属性没有成功序列化。

我是用的jobDataMap来进行参数传递的,其数据是以Blob类型存在了QRTZ_JOB_DETAIL表中的JOB_DATA字段中的,而直接查询该字段是无法显示出具体我们传入的信息的。

而当我们使用JobDetail存储的时候,我们是不能把没有实现序列化的对象放入其中的,因为Quartz是使用Blob字段保存(也可以通过配置文件关闭,即,经过查询,org.quartz.jobStore.useProperties 指示JobDataMaps中的所有值都将是字符串,避免了将非String类序列化为BLOB时可能产生的类版本控制问题)序列化 过的JobDataMap中的对象,如果我们想要取出这些数据的话,还需要经过一系列的处理。

之后查看自己的属性,发现MultipartFile是不能序列化的,而我的sendEmailDto类里面是存在MultipartFile的,所以就没办法序列化,才会报了这个错。

Unable to serialize JobDataMap for insertion into database borg.apache.catalina.core.ApplicationPart_第2张图片

问题解决

如果允许的话你可以把你的那个文件属性去掉,当然这个概率不高,如果要解决这个问题的话可以考虑一下使用byte[]将文件转化为字节形式。

 

你可能感兴趣的:(报错,数据库,apache)