【二三方】_获取get或post请求的所有请求参数和请求头

获取get或post请求的所有请求参数和请求头

获取一个get或post请求的所有请求参数和请求头的代码实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//HttpServletRequest可以直接从Spring容器中注入到Controller实例中,也可以作为接口方法的入参传入接口中。
@Autowired
private HttpServletRequest request;

@RequestMapping(value = "/test/getAllData", method = {RequestMethod.POST, RequestMethod.GET})//该接口post或get请求
public String getAllData() {

//1.getParameterMap()获取参数
Map<String, String> params1 = new HashMap<>();
Map<String, String[]> parameterMap = request.getParameterMap();
for (String key : parameterMap.keySet()) {
params1.put(key, request.getParameter(key));
}

//2.getReader()获取参数
Map<String, String> params2 = new HashMap<>();
StringBuffer body = new StringBuffer();
try {
String str;
BufferedReader br = request.getReader();
while ((str = br.readLine()) != null) {
body.append(str);
}
JSONObject jsonObject = JSONObject.parseObject(body.toString());
if (jsonObject != null) {
for (String key : jsonObject.keySet()) {

//参数a的值为数组,进行特殊处理
if ("a".equals(key)) {
continue;
}

params2.put(key, jsonObject.getString(key));
}

//对参数a的特殊处理
JSONArray jsonArray = jsonObject.getJSONArray("a");
if (jsonArray != null && jsonArray.size() > 0) {
JSONObject o = jsonArray.getJSONObject(0);
if (o != null) {
for (String key : o.keySet()) {
params.put(key, o.getString(key));
}
}
}

}
} catch (Exception e) {
e.printStackTrace();
}

//3.getHeaderNames()获取请求头名,getHeader()再获取请求头
Map<String, String> headerMap = new HashMap<>();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String element = headerNames.nextElement();
if (element.contains("-")) {
//过滤掉nginx设置的请求头
continue;
}
headerMap.put(element, request.getHeader(element));
}
}

Map<String, String> answer = new HashMap<>();
answer.put("code","200");
answer.put("msg","访问成功");
answer.put("params1",JSON.toJSONString(params1));
answer.put("params2",JSON.toJSONString(params2));
answer.put("headerMap",JSON.toJSONString(headerMap));
return JSON.toJSONString(answer);
}
  • 设置@RequestMapping注解的配置,可以使一个接口接收GET、POST等多种不同类型的请求。
  • post请求也可以在url路径当中以?&的形式放置参数,同时也可以在请求体中放置参数,两者可以同时存在。
  • 实例中的1.getParameterMap()可以同时获取到url路径中的请求参数和请求体中application/x- www-form-urlencoded格式的请求参数。
  • 实例中的2.getReader()可以获取到请求体中application/json格式或multipart/form-data格式的请求参数。
  • 本实例中的代码为普遍适用的范例,但是当请求参数值为数组时,注意进行特殊处理。比如当我们知道参数中的某个属性有多个参数值,我们可以使用String[]或JSONArray来接收该参数。