write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.Stand

触发背景

在做一个导入excel的需求,想要支持多文件上传。结果就出现了异常。
异常状态码:500,异常信息:操作失败,write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile, fieldName : 0, write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.MultipartFileResource, fieldName : resource

在这里插入图片描述

结论

JSON解析异常,无法把文件对象转成json字符串。报错代码大概率是在AOP里面。

排查过程

从异常信息来看,并不是我所捕获的异常。开启debug,一直跑到最后即将返回都没有发送异常。再点下一步,就返回异常了。
write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.Stand_第1张图片
大致可以排除是我写的代码的问题。从异常来看,涉及到fastjson 和multipart,似乎是fastjson 无法解析multipart对象,然后发生了异常;但我的代码并没有使用json,应该是AOP的代码出现了异常,但我找不到AOP代码在哪。
于是我复制错误信息去网上搜,搜出来说是AOP拦截了参数类型,只需要删掉就行了。我根据他们的文件名去搜,还真搜到了,好在文件名的部分一样。(你们可以大概看看有没有什么AOP操作,比如日志注解)
write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.Stand_第2张图片

从下面代码可以看出,只把单文件过滤掉了,但多文件没有过滤掉,于是我在后面加上了之后再测试就可以了。
write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.Stand_第3张图片
加上之后:
write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.Stand_第4张图片

这些代码是项目实现的日志注解,我确实在方法加上了该注解,而这个注解一开始的实现没有考虑到多文件的情况,所以没有过滤掉,加上之后就好了。发生异常的主要原因是JSONObject无法将文件对象转成JSON字符串,不理解为什么网上的把拦截去掉反而不会再报异常。
write javaBean error, fastjson version 1.2.75, class org.springframework.web.multipart.support.Stand_第5张图片

你可能感兴趣的:(Java,问题排查,前端)