在Java(JAX-RS)上的POST请求中接收未知参数名称

时间:2016-09-13 12:57:29

标签: java post jax-rs form-parameter

我在JAX-RS中有以下POST响应。

@POST
@Path("/save")
public Response saveS(@FormParam(key) String value) throws SQLException {           
    return Response.ok("TODO", MediaType.APPLICATION_JSON).build();
}

收到的参数可以称为nameage或许多其他内容。我在代码中将其标识为key(显然它不起作用)。

如何检索该参数的名称?

由于

1 个答案:

答案 0 :(得分:1)

  

接收的参数可以称为名称或年龄或许多其他内容。我已将其识别为代码中的关键字(显然它不起作用)。

正如您已经发现的那样,它不起作用,因为@FormParam期望表单参数的名称,因为它在相应的HTML表单中定义。这意味着您应该知道要为该方法的参数(在这种情况下为value)分配哪个表单参数。

以下是从JAX-RS specification

中提取的@FormParam注释的定义
  

FormParam参数

     

指定从请求实体主体中的表单参数中提取方法参数的值。注释的值标识表单参数的名称。请注意,虽然注释目标允许在字段和方法上使用,但规范仅需要支持在资源方法参数上使用。

除此之外,您应该将@Consumes注释添加到资源方法中,如下所示:

@POST
@Path("/save")
@Consumes("application/x-www-form-urlencoded")
public Response saveS(@FormParam(key) String value) throws SQLException {           
    return Response.ok("TODO", MediaType.APPLICATION_JSON).build();
}

<强>更新 我没有试过自己,但你可以尝试告诉我它是否有效。在这里你应该得到所有的参数,以便你可以解析所有的表单字段:

@POST
@Consumes("application/x-www-form-urlencoded")
public void post(MultivaluedMap<String, String> formParams) {
   // parse the map here
}