SpringBoot 上传文件记录日志报错:It is illegal to call this method if the current request is not in asynchronou

Spring Boot上传文件记录日志时出现报错,原因是获取的入参包含ServletRequest、MultipartFile等无法序列化的对象。解决办法是对入参进行处理,过滤掉不能序列化的入参,只记录需要的参数到日志中。

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();
			}
		}

将不能进行序列化的入参过滤掉,只要留下我们需要记录的入参参数记录到日志中即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值