在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息。
最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到post的请求数据呢,方法很多,下面只给出一种方式。

在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完 整的请求路径和请求所有参数列表,

POST的需要getParameterMap()方法遍历得到,不论GET或POST都可以通过 getRequestURL+getParameterMap()来得到请求完整路径。

package com.xxx
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class GetParams extends HttpServlet {
private static final long serialVersionUID = 1L; public GetParams() {
super();
} protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println("GET " + request.getRequestURL() + " "
+ request.getQueryString()); Map<String, String[]> params = request.getParameterMap();
String queryString = "";
for (String key : params.keySet()) {
String[] values = params.get(key);
for (int i = 0; i < values.length; i++) {
String value = values[i];
queryString += key + "=" + value + "&";
}
}
// 去掉最后一个空格
queryString = queryString.substring(0, queryString.length() - 1);
writer.println("GET " + request.getRequestURL() + " " + queryString);
} protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
Map<String, String[]> params = request.getParameterMap();
String queryString = "";
for (String key : params.keySet()) {
String[] values = params.get(key);
for (int i = 0; i < values.length; i++) {
String value = values[i];
queryString += key + "=" + value + "&";
}
}
// 去掉最后一个空格
queryString = queryString.substring(0, queryString.length() - 1);
writer.println("POST " + request.getRequestURL() + " " + queryString);
}
}

根据上面的代码,稍微改动一下,实现如下:

  /**
* 获取POST数据,不支持数组形式数据,一般使用场景是对方使用POST方式传递数据过来
* TODO 待完善
* @author phpdragon
* @date 2014-12-24 下午3:45:22
* @return
* @description :
* @return Map<String,String>
* @throws
*/
@SuppressWarnings("unchecked")
private static Map<String, String> getPostData() {
Map<String, String> param = new HashMap<String, String>(); HttpServletRequest request = ServletActionContext.getRequest();
Map<String, String[]> params = request.getParameterMap();
for (String key : params.keySet()) {
String[] values = params.get(key);
for (int i = 0; i < values.length; i++) {
param.put(key, values[i]);
}
} return param;
}

虽然有所不足,但对于手上的项目中API接口场景已经满足需求了。

最新文章

  1. jquery实现前台倒计时。应用下单24小时后自动取消该订单
  2. Linux10.11-10.18)学习笔记(
  3. SUID或SGID程序中能不能用system函数
  4. (转)添加PROPAGATION_REQUIRES_NEW 事务没有产生作用
  5. Kafka基础入门
  6. Java面试准备之探究源码
  7. poj 2566&quot;Bound Found&quot;(尺取法)
  8. photoshop 切图技巧
  9. Java项目中使用log记录日志的一些总结
  10. 关于Bootstrap自定义图标
  11. 浅谈Java代理二:Cglib动态代理-MethodInterceptor
  12. web前端----jQuery动画效果
  13. java第三次实验报告
  14. Ubuntu 安装 Oracle11gR2:&#39;install&#39; of makefile &#39;/home/oracle/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk&#39;
  15. hdu1242 Rescue DFS(路径探索题)
  16. python数据文件读写
  17. html中的标签分类
  18. 【算法笔记】B1048 数字加密
  19. scala的object知识点
  20. Stars in Your Window POJ - 2482

热门文章

  1. C#完美读取CSV
  2. Jmeter 爬Boss中注册和登录
  3. 在centos下解决 “致命错误:curses.h:没有那个文件或目录”
  4. Lua中模块初识
  5. inputsimulator - Windows Input Simulator
  6. Shell脚本中点号+文件名的作用
  7. Cron\CronExpression::setPart(&quot;24&quot;)
  8. hdu6394Tree lct
  9. 170301、使用Spring AOP实现MySQL数据库读写分离案例分析
  10. HDU-5050 Divided Land (二进制求GCD)