首先 我们的目的是做一个拦截器 能够对http请求做profiler,能够记录本次的调用情况,这里说下如何从http请求中获取到出参的问题。

方案一:参照http://blog.csdn.net/wuhenzhangxing/article/details/53079458

该方案中,使用了HttpServletResponseWrapper,也就是HttpServletResponse的装饰器,相当一是一个代理,当业务中对response做写入的时候,会被装饰器拦截下来做个处理,比如输出到另外的一个ByteArrayOutputSteam中。然后我们就可以获取到指定的值了。

这种方案,使用的是标准的servlet api,比较标准 但是感觉还是有个小麻烦。

方案二:既然反射的功能那么强大  那么我们能不能用反射来做呢?

上代码:

    /*获取http出参*/
private String getOutputSteamContentForTomcat7(ServletResponse response) {
try {
OutputStream outputStream = response.getOutputStream();
Object contentHolder = ReflectUtil.getFiledValue(outputStream, "ob");
//获取到buffer 然后从buffer中获取到返回值
Object result = ReflectUtil.getFiledValue(contentHolder, "outputChunk");
String resultString = result == null ? StringUtils.EMPTY : result.toString();
if (StringUtils.startsWith(resultString, "<html>")) {
//含有html文本
return "HTML-CONTENT";
}
return resultString;
} catch (Exception e) {
LoggerUtils.error(logger, e, "获取WEB返回内容异常");
return StringUtils.EMPTY;
}

该方法中 使用反射来获取,但是坏处也非常明显,由于不是使用的标准的API接口 会导致tomcat版本不同 内部的类结构不同而导致获取不到 但是实现起来比较简单。经过测试,对于tomcat6和tomcat7是兼容的 但是tomcat8非兼容

使用filter获取http请求的出参以及入参的更多相关文章

  1. shell 脚本中的入参获取与判断

    1.获取shell脚本的入参个数: $# 2.获取shell脚本的第n个入参的字符个数/字符串长度(注意这里的n需要替换为具体的数字,如果这个数字超过实际的入参个数,结果为0): ${#n}

  2. 命令行通过入参调用jar包

    命令行通过入参调用jar包 最近因为项目需要,需要实现一个功能,即定时执行服务器上的一个脚本去对数据库的数据进行业务处理,要操作的数据库有很多种,mysql.db2.oracle.sqlserver等 ...

  3. Web API入参,响应规范

    入参绑定 入参应该定义成实体,而不是多个参数,方便扩展.[FromBody]和[FromUrl]特性也最好加上. public ActionResult<Pet> Create([From ...

  4. Spring AOP 自定义注解获取http接口及WebService接口入参和出参

    注解方法实现过程中可以采用如下获取方式:—以下为例  HttpServletRequest request = ((ServletRequestAttributes) RequestContextHo ...

  5. Saiku根据入参日期查询出对应的数据(二十)

    Saiku根据入参日期查询出对应的数据 之前好像有写过一篇博客关于saiku date range的,现在进一步更新啦!!! 这里的日期筛选会更完善一些,需要提供两个参数 开始日期与结束日期(star ...

  6. C#爬虫之通过Selenium获取浏览器请求响应结果

    前言 在进行某些爬虫任务的时候,我们经常会遇到仅用Http协议难以攻破的情况,比如协议中带有加密参数,破解需要花费大量时间,那这时候就会用Selenium去模拟浏览器进行页面上的元素抓取 大多数情况下 ...

  7. 解决Spring Boot中,通过filter打印post请求的 request body 问题

    http://slackspace.de/articles/log-request-body-with-spring-boot/ (filter + RequestWrapper:最优雅的写法) ht ...

  8. springMVC中 request请求数据绑定到Controller入参 过程剖析

    前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...

  9. 【openresty】获取post请求数据FormInputNginxModule模块

    关于openresty的一些介绍看这里. 首先,实验背景为openresty作为后台来处理前台post传递的数据. 在openresty内,有一个FormInputNginxModule模块,作用是解 ...

随机推荐

  1. 利用React实现表头维度功能

    这是我真正意义上地用react实现一些东西.这次分享的是一个很简单的小组件,效果图先放上来: 前端样式用的是一套框架.功能很简单,就是根据选择的维度,在成员里选择对应这个维度的选项. 首先初始化一些数 ...

  2. dblink嵌套场景下 查询出现:ORACLE ORA-00600错误的解决

    前段时间在做oracle查询的时候遇到了一个非常奇怪的现象,现将现象和解决过程记录下来,以备查看: 环境描述:A数据库通过dblink访问B数据库的视图,B数据库的视图的数据是通过B的dblink连接 ...

  3. MySQL性能分析及explain的使用

    MySQL性能分析及explain用法的知识 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id  selectty ...

  4. Android课程---关于GridView网格视图的学习

    activity_ui6.xml <?xml version="1.0" encoding="utf-8"?> <GridView xmlns ...

  5. gojs绘流程图

    引用:http://www.tuicool.com/articles/eEruaqu http://www.open-open.com/lib/view/open1435023502544.html ...

  6. js、css引用文件的下载方式

    js.css引用文件的下载方式 一.测试(chrome):1.直接使用<script...>.<link...>标签来混合引入脚本文件和css文件, <script as ...

  7. JavaScript的3大组成部分&&ECMAScript函数&&闭包

    1.JavaScript实现是由ECMAScript.DOM和BOM组成.a.ECMAScript仅仅是一个描述,定义了脚本语言的所有属性.方法和对象.b.DOM[文档对象模型]是HTML和XML的应 ...

  8. 真机测试及布署Code Sign error问题总结

    Code Sign error: Certificate identity 'iPhone Developer: idf (XR9HN3TD7E)' appears more than once in ...

  9. 20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标

    自己较强的技能获取经验. 1:实话实说我自己是没有哪个技能可以超过90%的人的,只有自认为做的还可以的一些事情,例如打篮球,office软件的应用,一百米跑.至于其他方面就是很平庸了. 2:经验主要有 ...

  10. BundleConfig.cs

    namespace Knockout.App_Start { public class BundleConfig { public static void RegisterBundles(Bundle ...