如何从HttpMethodParams获取值

时间:2017-09-13 06:30:29

标签: java http spring-mvc http-parameters

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

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的null值,那么我怎样才能获得它们的值?我知道我可以使用method.setParameter(key,value)在客户端设置参数并使用getParameter(key)来获取参数值,但我只是好奇是否有任何方法可以在服务器端设置获取值通过HttpMethodParams。

2 个答案:

答案 0 :(得分:1)

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

根据 - HttpMethodParams的JavaDoc,

  

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

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

请求参数需要如图here

所示进行设置

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

所以你在服务器端获得的是使用-getHeaders(),getIntHeader(),getHeaderNames(),getDateHeader(),getProtocol()等提取命名的头或头。服务器端是标准化的,所以你不应该看到像HttpMethodParams这样的东西。

答案 1 :(得分:0)

您必须使用HttpServletRequest发送参数。

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

但是如果你想通过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");

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