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

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。

最佳答案

我认为,您在HttpServletRequestHttpMethodParams中设置的用户定义参数之间感到困惑。

根据-HttpMethodParams的JavaDoc,


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


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

需要如图所示设置请求参数here

您还必须注意,您在客户端使用的所有这些类(HttpClientPostMethodHttpMethodParams等)都来自Apache,这是生成和调用HTTP端点的便捷方法,但最终会您将在服务器端使用HttpServletRequest,并且系统不是特定于Apache HttpClient的。

因此,您在服务器端所做的就是使用-getHeaders(),getIntHeader(),getHeaderNames(),getDateHeader(),getProtocol()等提取命名的头。服务器端是标准化的,因此您不应在此处看到类似HttpMethodParams的内容。

09-12 09:13