SSH 获取GET/POST参数
2024-08-22 11:53:23
在做项目的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接口场景已经满足需求了。
最新文章
- jquery实现前台倒计时。应用下单24小时后自动取消该订单
- Linux10.11-10.18)学习笔记(
- SUID或SGID程序中能不能用system函数
- (转)添加PROPAGATION_REQUIRES_NEW 事务没有产生作用
- Kafka基础入门
- Java面试准备之探究源码
- poj 2566";Bound Found";(尺取法)
- photoshop 切图技巧
- Java项目中使用log记录日志的一些总结
- 关于Bootstrap自定义图标
- 浅谈Java代理二:Cglib动态代理-MethodInterceptor
- web前端----jQuery动画效果
- java第三次实验报告
- Ubuntu 安装 Oracle11gR2:&#39;install&#39; of makefile &#39;/home/oracle/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk&#39;
- hdu1242 Rescue DFS(路径探索题)
- python数据文件读写
- html中的标签分类
- 【算法笔记】B1048 数字加密
- scala的object知识点
- Stars in Your Window POJ - 2482
热门文章
- C#完美读取CSV
- Jmeter 爬Boss中注册和登录
- 在centos下解决 “致命错误:curses.h:没有那个文件或目录”
- Lua中模块初识
- inputsimulator - Windows Input Simulator
- Shell脚本中点号+文件名的作用
- Cron\CronExpression::setPart(";24";)
- hdu6394Tree lct
- 170301、使用Spring AOP实现MySQL数据库读写分离案例分析
- HDU-5050 Divided Land (二进制求GCD)