大佬教程收集整理的这篇文章主要介绍了FastJson格式化Request对象导致的一次异常思考,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一、问题描述:
近期,在环境中出现一个阻塞性的异常“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)”。
二、问题影响:
影响了日工作的正常工作进度;
阻塞的关键点异常在捕获后被吃掉,未正确打印出来,影响了排查问题的方向。重新打印异常栈后,定位到问题并解决,恢复正常的工作进程。
三、问题复现过程:
使用JUnit做一个最简单的单元测试,直接Json.from(request)
四、问题分析:
FastJson是根据bean的get/set方法做反射解析的,当遇到Servlet3规范时(Servlet2.5是否会存在还没验证),恰好存在一个getAsyncCo@R_616_10443@t()方法,内部的判断逻辑是servlet异步模式为false,直接抛出IllegalStateException,导致此种尴尬的异常出现,进而阻塞了工作的进程。
五、问题引发的思考:
1.有没有必要直接打印框架的一些形参,比如Servlet的request/Response,MQ的onmessage的方法形参,还有httpClient的Response/ClosableResponse;
直接打印MQ的onmessage的方法形参,看到的是一些二进制数组,没有可读性;
直接打印httpClient的Response/ClosableResponse,看到的是一些不可读的数据;
直接打印Servlet的request.getrequestuRI,会增加更多的磁盘IO;
2.是否可以考虑打印其中的业务参数,而不是那些比较贴近TCP发送/响应的请求,更多的打印应用层面的业务请求参数和响应结果;
以上是大佬教程为你收集整理的FastJson格式化Request对象导致的一次异常思考全部内容,希望文章能够帮你解决FastJson格式化Request对象导致的一次异常思考所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。