当前位置: 首页 > news >正文

广东seo网站推广企业网站服务门户

广东seo网站推广,企业网站服务门户,网站名字和域名,有哪些网站上可以做试卷FastJson、Jackson使用AOP切面进行日志打印异常 一、概述 1、问题详情 使用FastJson、Jackson进行日志打印时分别包如下错误: 源码: //fastjon log.info("\nRequest Info :{} \n", JSON.toJSONString(requestInfo)); //jackson …

FastJson、Jackson使用AOP切面进行日志打印异常

一、概述

1、问题详情

使用FastJson、Jackson进行日志打印时分别包如下错误:

源码

//fastjon
log.info("\nRequest Info :{} \n"JSON.toJSONString(requestInfo));
//jackson
log.info("\nRequest Info :{} \n"new ObjectMapper().writeValueAsString(requestInfo));
  • Fastjson错误信息

    java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)at org.apache.catalina.connector.Request.getAsyncContext(Request.java:1812)at org.apache.catalina.connector.RequestFacade.getAsyncContext(RequestFacade.java:1068)
    
  • Jackson错误信息:

    com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.util.Collections$3 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: icu.chiou.qvideo.aop.AccessLogAspect$RequestInfo["requestParams"]->java.util.HashMap["request"]->org.apache.catalina.connector.RequestFacade["parameterNames"])
    

2、问题原因

猜测:

这些错误的原因可能是由于在日志打印过程中,引入了 Web 请求的相关对象,而这些对象无法直接被序列化为 JSON。

查找:

  • 调用getAsyncContext方法出现了问题,表示当前这个request对象不是异步模式的,所以不能调用getAsyncContext这个方法,这个request的异步模式这是servlet3中的一个新特性,可以使用注解或者配置xml的方式进行开启,一般用于异步请求,这个request的异步模式的使用场景,fastjson序列化出错,出错的原因是fastjson调用了getAsyncContext方法,由于request不是异步模式,所以报错了,那么结果就是fastjson序列化出错了。
  • jackson异常信息表明 jackson 无法找到适合序列化 java.util.Collections$3 这个类的方法。这种异常通常出现在对象中包含了无法序列化的属性或者属性类型,导致 Jackson 无法将整个对象序列化为 JSON 字符串。在你的异常信息中,可以看到异常发生在 AccessLogAspectRequestInfo 对象的 requestParams 属性中,其中包含了一个 java.util.HashMap 对象,该对象中的属性为 request,类型为 org.apache.catalina.connector.RequestFacade,进而包含了 parameterNames 属性,类型为 java.util.Collections$3,而 Jackson 无法对这个属性进行序列化。

二、解决

1、问题定位

看一下异常信息,按照打印的栈信息来看:

  • RequestFacade对象中的getAsyncContext方法被调用了,但是工程里面并没用用到RequestFacade对象,且其没有重载方法
  • 查看RequestFacade类的源码过后发现RequestFacade其实是HttpServletRequest的一个具体实现
  • 那么问题就定位到了,fastjson把HttpServletRequest序列化了,只要把方法上的HttpServletRequest 参数去掉就可以了.

在这里插入图片描述

2、解决办法

把进行JSON转字符串序列化对象内的request过滤即可:

private Map<String, Object> getRequestParamsByJoinPoint(JoinPoint joinPoint) {//参数名String[] paramNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames();//参数值Object[] paramValues = joinPoint.getArgs();return buildRequestParam(paramNames, paramValues);
}private Map<String, Object> buildRequestParam(String[] paramNames, Object[] paramValues) {Map<String, Object> requestParams = new HashMap<>();for (int i = 0; i < paramNames.length; i++) {Object value = paramValues[i];//添加这个if (value instanceof ServletRequest || value instanceof ServletResponse) {continue;}//如果是文件对象if (value instanceof MultipartFile) {MultipartFile file = (MultipartFile) value;value = file.getOriginalFilename();  //获取文件名}requestParams.put(paramNames[i], value);}return requestParams;
}

3、效果实现

源代码和拓展:

需要控制台格式化的输出JSON只需要调用:writerWithDefaultPrettyPrinter()

log.info("\nRequest Info :{} \n", new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(requestInfo));
log.info("\nRequest Info :{} \n", JSON.toJSONString(requestInfo));

在这里插入图片描述

http://www.yayakq.cn/news/433685/

相关文章:

  • 24小时学会网站建设 pdf下载wordpress 去掉自豪
  • 台州市城乡建设局网站北京网站优化团队
  • js源码下载从哪个网站能下载网站备案 个人组网方案
  • 群晖做网站服务器会卡吗温州做网站的企业
  • 固原市住房和城乡建设局网站做母婴用品的网站有哪些
  • 正规网站建设房产信息门户网站建设方案
  • 仙游县网站建设wordpress 获取有图片的文章
  • 营销型高端网站建设价格群辉wordpress阿里云ssl
  • 怎么创建图片网站wordpress主页音乐
  • 如何做电子书下载网站汽车网站建设的目的
  • eclipse网站开发实例福建漳州东山建设局官方网站
  • 移动 网站模板外贸电商怎么做
  • 如何做好购物网站5昌平区网站建设
  • 国内知名网站建设企业怎么创建万维网网站
  • 分类信息网站如何做排名中国有哪些建筑公司
  • 长春建站培训班企业微信小程序制作
  • 企业网站的开发流程是什么专业企业网站建设公司价格
  • 网站建设的要求有哪些方面平面设计相关的网站有哪些
  • 南通影楼网站建设可以加速浏览器的加速器
  • 温州网站开发wordpress本地上传服务器
  • wordpress小说网站模板下载湖南建筑信息网平台
  • 经营网站 备案wordpress 线条不显示
  • 后台网站怎么做视频asp做网站的缺点
  • 长安区建设局网站桂林网站建设凡森网络
  • 关于互联网的网站seo技术快速网站排名
  • 南博会官方网站建设投入个人如何在百度上做广告
  • 网络编程基础上海优化价格
  • 怎么做点击图片进网站无锡模板网站设计公司
  • 巩义网站建设费用多少网站制作公司网站
  • 东莞网站建设智搜宝包头市建设工程质量监督站网站