SpringBoot 上传文件记录日志报错:It is illegal to call this method if the current request is not in asynchronou
springboot 上传文件记录日志是报错It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
原因,因为Object[] args = joinPoint.getArgs();会得到多余的ServletRequest,MultipartFile等,而这些入参并不能进行序列化。这里我们将args进行处理:
// 请求的参数
Object[] args = joinPoint.getArgs();
// 将参数所在的数组转换成json
Object[] arguments = new Object[args.length];
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof ServletRequest || args[i] instanceof ServletResponse
|| args[i] instanceof MultipartFile) {
/* ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is
illegal to call this method if the current request is not in asynchronous
mode (i.e. isAsyncStarted() returns false)
ServletResponse不能序列化 从入参里排除,否则报异常:java.lang.IllegalStateException:
getOutputStream() has already been called for this response*/
continue;
}
arguments[i] = args[i];
}
String paramter = "";
if (arguments != null) {
try {
paramter = JSONArray.fromObject(arguments).toString();
} catch (Exception e) {
paramter = arguments.toString();
}
}
将不能进行序列化的入参过滤掉,只要留下我们需要记录的入参参数记录到日志中即可。
还没有评论,来说两句吧...