fastjson——使用 aop 打印入参,报错:getOutputStream() has already been called for this response
时间:2022-07-25
本文章向大家介绍fastjson——使用 aop 打印入参,报错:getOutputStream() has already been called for this response,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、问题描述
我在使用 aop 做日志切面,记录 controller 的入参和返回时,将参数使用 fastjson 格式化。代码如下:
Object[] args = joinPoint.getArgs();
// 报错出现在下面这行
String params = JSONObject.toJSONStringWithDateFormat(args, dateFormat, SerializerFeature.WriteMapNullValue);
结果出现如下报错:
二、摸索解决
- 我发现出错调用的方法如下:
@GetMapping("/read/{id}")
public String read(@PathVariable("id") Integer id,
HttpServletResponse response,
Model model){
return null;
}
- 根据网上搜索,以及结合猜测。getOutputStream() 该方法已经被调用 ,猜想应该是参数为 HttpServletResponse 导致的,于是解决方法为在参数中将 HttpServletResponse 剔除。改为如下:
Object[] args = joinPoint.getArgs();
if (Objects.nonNull(args)){
List<Object> argsList = Arrays.asList(args);
// 将 HttpServletResponse 和 HttpServletRequest 参数移除,不然会报异常
List<Object> collect = argsList.stream().filter(o -> !(o instanceof HttpServletResponse || o instanceof HttpServletRequest)).collect(Collectors.toList());
collect.toArray(args);
}
String params = JSONObject.toJSONStringWithDateFormat(args, dateFormat, SerializerFeature.WriteMapNullValue);
- 再次测试,报错消失。说明解决成功。参数日志打印如下:
- 可直接运行
- Ryu:网络时延探测应用
- box布局
- Event Loop
- 把图片变成字体,然后在引入到网页
- Flutter环境搭建
- java.net.ConnectException: Call From slaver1/192.168.19.128 to slaver1:8020 failed on connection exc
- 18/03/18 04:53:44 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your clu
- 技术干货 | Hadoop3.0稳定版安装攻略来啦!
- ios逆向工具MonkeyDev简介
- 自定义下拉列表
- 身份证号码验证算法
- 技术干货 | hive安装部署
- js图片的预加载功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c/c++补完计划(五): 平衡二叉树和二叉搜索树
- 【原创】Java并发编程系列30 | ThreadLocal
- c/c++补完计划(六): 语法糖lambda
- 从别人的代码中学习golang系列--03
- Flink写出数据到HBase的Sink实现
- 「MoreThanJava」Day 4:面向对象基础
- RTSP协议视频平台EasyNVR接入EasyNVS通道不显示任何数据怎么处理?
- RTSP协议视频平台EasyNVR接入视频综合管理平台EasyNVS可以自由修改配置吗?
- 使用Azure人脸API对图片进行人脸识别
- 视频综合管理平台EasyNVS显示的rtsp和rtmp穿透地址错误如何解决?
- 开发RTSP协议视频平台EasyNVR采用ffmpeg集成fdk-aac报no member named “encoderDelay”
- 微信小程序开发实战(17):用画布画一张笑脸
- PHP中Session ID的实现原理分析和实例解析
- 【好文推荐】黑莓OS手册是如何详细阐述底层的进程和线程模型的?
- 简析Spark Streaming/Flink的Kafka动态感知