zoukankan      html  css  js  c++  java
  • JSON.toJSONString(joinPoint.getArgs())报错getOutputStream() has already been called for this response

    nested exception is java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)] with root cause
    
    private void addOperationLog(JoinPoint joinPoint, Object res, int time) {
    MethodSignature signature = (MethodSignature)joinPoint.getSignature();
    MpOpLog operationLog = new MpOpLog();
    operationLog.setRunTime(time);
    operationLog.setReturnVal(JSON.toJSONString(res));
    System.out.println("================:"+joinPoint.toString());
    Object[] args = joinPoint.getArgs();
    Object[] arguments = new Object[args.length];
    System.out.println("================:"+args);
    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 = JSONObject.toJSONString(arguments);
    } catch (Exception e) {
    paramter = arguments.toString();
    }
    }
    System.out.println("================:"+paramter.toString());
    operationLog.setArgs(paramter.toString());
    operationLog.setOpTime(new Date());
    operationLog.setMethod(signature.getDeclaringTypeName() + "." + signature.getName());
    
    String uerid = AppUtil.getJwtParam("userId");
    String userName = AppUtil.getJwtParam("userName");
    
    operationLog.setUserId(StringUtils.defaultIfBlank(uerid, "anonymous"));
    operationLog.setUserName(StringUtils.defaultIfBlank(userName, "anonymous"));
    
    OpLog annotation = signature.getMethod().getAnnotation(OpLog.class);
    if (annotation != null) {
    operationLog.setId(UUID.randomUUID().toString().replace("-", ""));
    operationLog.setLevel(annotation.level());
    operationLog.setContent(getDetail(((MethodSignature)joinPoint.getSignature()).getParameterNames(),
    arguments, annotation));
    operationLog.setOpType(annotation.operationType().getValue());
    operationLog.setOpUnit(annotation.operationUnit());
    }
    
    tmpOpLogService.insert(operationLog);
    }
  • 相关阅读:
    SQL Server索引进阶:第十二级,创建,修改,删除
    SQL Server索引进阶第十一篇:索引碎片分析与解决
    Object.create()和new object()和{}的区别
    vue 前后端分离nginx部署
    实现组件props双向绑定解决方案
    prop不同数据类型设置默认值
    vue + element ui 阻止表单输入框回车刷新页面
    Vue.js中 watch(深度监听)的最易懂的解释
    vue-resource和axios区别
    JS中 reduce() 的用法
  • 原文地址:https://www.cnblogs.com/hikoukay/p/11305282.html
Copyright © 2011-2022 走看看