0

在客户端,我使用以下代码:

HashMap<String, String> paramMap = new HashMap<>();
paramMap.put("userId", "1579533296");
paramMap.put("identity", "352225199101195515");
paramMap.put("phoneNum", "15959177178");
HttpClient client = new HttpClient();
PostMethod method = new PostMethod("http://localhost:8088/requestTest");
HttpMethodParams p = new HttpMethodParams();
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
    p.setParameter(entry.getKey(), entry.getValue());
}
method.setParams(p);
client.executeMethod(method);

我的服务器端的代码是这样的:

@RequestMapping("/requestTest")
public void requestTest(HttpServletRequest request) throws IOException {
   String userId = request.getParameter("userId");
   String identity= request.getParameter("identity");
   String phoneNum= request.getParameter("phoneNum");
   System.out.println(userId+identity+phoneNum);
}

但是我得到了 userId、identity 和 phoneNum 的空值,那么我怎样才能得到它们的值呢?我知道我可以使用 method.setParameter(key,value) 在客户端设置参数并使用 getParameter(key) 获取参数值,但我只是好奇是否有任何方法可以在服务器端设置值通过 HttpMethodParams。

4

2 回答 2

1

HttpServletRequest我认为,您对在和中设置的用户定义参数感到困惑HttpMethodParams

根据 - 的JavaDoc HttpMethodParams

此类表示适用于 HTTP 方法的 HTTP 协议参数的集合。

这些是特定于该 HTTP 方法的预定义参数(请参阅此HttpServletRequest),与 -参数无关。

请求参数需要设置为here

您还必须注意,您在客户端使用的所有这些类(,HttpClient等)都来自 Apache,只是为了方便地生成和调用 HTTP 端点,但最终您在服务器端将拥有的是一个和那里的系统不是 Apache HttpClient 特定的。PostMethodHttpMethodParamsHttpServletRequest

因此,您在服务器端所获得的只是使用 - getHeaders() 、 getIntHeader() 、 getHeaderNames() 、 getDateHeader() 、 getProtocol() 等提取一个或多个命名标头。服务器端是标准化的,所以你不应该看到类似的东西 -HttpMethodParams那里。

于 2017-09-13T07:05:48.610 回答
0

您必须使用 HttpServletRequest 发送参数。

HttpMethodParams 表示适用于 HTTP 方法的 HTTP 协议参数的集合。可以在此处找到 Http 方法参数列表。

但是,如果您想通过 HttpMethodParams 强制发送它,您可以在 HttpMethodParameter 的变量之一中设置参数的 JSON 表示,并使用该变量名检索其值。

示例代码:

HttpMethodParams p = new HttpMethodParams();
p.setCredentialCharset("{userId":1579533296}"); 
//for loop not required
//your code

现在您可以使用 ObjectMapper 解析该 JSON 并获取所需的值。

示例代码:

HttpMethodParams p = new HttpMethodParams();
JSONObject jsonObj = new JSONObject(p.getCredentialCharset()); 
jsonObj.get("userdId");

注意:这可能有效,但不是推荐的方式。

于 2017-09-13T08:07:38.333 回答