getWriter() has already been called for this response错误
来源:互联网 发布:外汇行情数据接口 编辑:程序博客网 时间:2024/06/05 23:39
在使用AOP时,出现了一个getWriter() has already been called for this response错误。
当时的代码是
@Around (EDP) public Object first(ProceedingJoinPoint joinPoint) throws Throwable { Object[] args = joinPoint.getArgs(); AcceptData acceptData = null; for (Object arg : args) { if(arg instanceof AcceptData){ acceptData= (AcceptData) arg; break; } } PrintWriter out = null; ServletRequestAttributes container=RequestContextHolder.getRequestAttributes(); HttpServletResponse response = container.getResponse (); out = response.getWriter (); if(acceptData==null){ out.print (JsonUtil.loadFalse ("签名错误")); return null; } SystemInfo systemInfo = systemInfoService.getSystemInfo (appkey); if(systemInfo==null){ out.print (JsonUtil.loadFalse (Constant.NOSYS)); return null; } int i=0; for (Object arg : args) { if(arg instanceof SystemInfo){ break; } i++; } args[i] = systemInfo; Object proceed = joinPoint.proceed (args); return proceed; }
@RestControllerpublic class CategoryController { @RequestMapping(value = "findCategoryList") public String findCategoryList(AcceptData acceptData,SystemInfo systemInfo){ List<VideoCategory> list = videoCategoryService.find(systemInfo,true); return JsonUtil.loadTrue(list); }}
错误原因:
@RestController是应该使用的ServletOutputStream进行发送数据的,而在之前我又实例化了PrintWrite
解决方法 1:不实例化PrintWrite,使用ServletOutputStream,在需要打印的地方使用write()方法
ServletOutputStream out = null; ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletResponse response = servletContainer.getResponse (); out = response.getOutputStream (); out.print (JsonUtil.loadFalse (Constant.NOSYS));
解决方法2:在执行方法前,调用response.reset ();
response.reset (); Object proceed = joinPoint.proceed (args);
疑问:
1.在我实例化了PW后,我对PW进行flush,或者close后,ServletOutputStream也无法对数据进行传输。
2.ServletOutputStream的print()方法,会直接报错No message available。
2点多了,时间关系就没深究了。如有知道的请解惑 : )
阅读全文
0 0
- getWriter() has already been called for this response错误
- getWriter() has already been called for this response 的解决办法
- getWriter() has already been called for this response 的解决办法
- getWriter() has already been called for this response 的解决办法
- servlet getWriter() has already been called for this response
- getWriter() has already been called for this response的解决方法
- getWriter() has already been called for this response
- getWriter() has already been called for this response的问题
- getWriter() has already been called for this response
- getWriter() has already been called for this response 的解决办法
- 解决getWriter() has already been called for this response异常
- 关于 getWriter() has already been called for this response 的错误解决办法
- getOutputStream() has already been called for this response错误解决办法!
- getOutputStream() has already been called for this response 错误解决
- getOutputStream() has already been called for this response 错误解决
- Struts2 getOutputStream() has already been called for this response 错误
- getOutputStream() has already been called for this response错误
- getOutputStream() has already been called for this response错误解决
- jqGrid
- 杭电ACM OJ 1029 Ignatius and the Princess IV 快速排序 挖坑填埋法
- JS事件流,事件绑定
- PTA_6-6 Deque(25 分)手动实现双端队列
- 【离散数学】2.1什么是命题
- getWriter() has already been called for this response错误
- eclipse安装php报错
- 分布式事物解决方案含视频教程
- Linux下多网卡绑定bonding bond6
- 转移表
- 装载问题--回溯法
- CUDA8.0安装的问题
- 剧本
- ListView具体使用