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

Receiving unknown parameter name on POST request in Java (JAX-RS)

我在 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(显然它不起作用)。

如何检索该参数的名称?

谢谢

The parameter that is received could be called name or age or many other things. I have identified it as key in the code (obviously it doesn't work).

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

这里是从JAX-RS specification中提取的@FormParam注解的定义:

FormParam Parameter

Specifies that the value of a method parameter is to be extracted from a form parameter in a request entity body. The value of the annotation identifies the name of a form parameter. Note that whilst the annotation target allows use on fields and methods, the specification only requires support for use on resource method parameters.

除此之外,您还应该将 @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
}