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();
}
}
将不能进行序列化的入参过滤掉,只要留下我们需要记录的入参参数记录到日志中即可。