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);
    }
  • 相关阅读:
    低压配电系统接地方式
    在MFC中添加用户自定义消息
    二维数组指针(百度)
    2009-08-12 17:19 16进制浮点数与十进制的转化 (转载)
    UCOS 中的中断处理
    转:智能卡测试操作系统技术
    转:ADO,OLEDB,ODBC,DAO的区别
    VC引用动态库
    VC引用静态库
    windows下查看静态库和动态库的导出函数
  • 原文地址:https://www.cnblogs.com/hikoukay/p/11305282.html
Copyright © 2011-2022 走看看