使用Java Jersey将所有POST数据参数检索到映射中

时间:2014-09-10 05:05:19

标签: java http post jersey

我正在尝试将HTTP POST请求的所有参数收集到地图中,但它无法正常工作。

使用GET,我使用了:

@Context
private HttpServletRequest request;

@GET
@Path("/{uuid}/invoke/{method}")
public Response invokeMethod (
    @PathParam("uuid") String uuid,
    @PathParam("method") String methodz
) {
    Map<String, String[]> params = request.getParameterMap();

它返回了地图。但是,当通过POST而不是内联URL发送表单数据时,映射将返回为NULL。

是否有类似的方法使用POST一次检索所有参数?

编辑:

我的数据作为序列化JSON提交,因此使用cURL语句作为示例:

curl --data "firstname=john&lastname=smith" http://localhost:8080/uuid1/apitest/method1

理想情况下,我想得到一个类似于:

的散列图
ParamMap["firstname"] = "john"
ParamMap["lastname"] = "smith"

此外,参数不会是静态的,所以这个cURL:

curl --data "job=construction" http://localhost:8080/uuid2/apitest/method2

会导致:

ParamMap["job"] = "construction"

2 个答案:

答案 0 :(得分:1)

最后使用这个帖子解决了这个问题:

Jersey: Consume all POST data into one object

我的新功能是:

@POST
@Path("/{uuid}/invoke/{method}")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response invokeMethod (
    MultivaluedMap<String,String> params,
    @PathParam("uuid") String uuid,
    @PathParam("method") String method
) {

变量'params'现在是一个包含表单数据键/值对的映射。

答案 1 :(得分:-1)

您可以尝试以下代码

@POST
@Path("/{uuid}/invoke/{method}")
public Response invokeMethod (
    @Context UriInfo request
) {
    Map<String, List<String>> params = request.getPathParameters();
  }

你不需要写

 @Context
 private HttpServletRequest request;

现在你可以了解......