在 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();
}
接收到的参数可以称为 name
或 age
或许多其他名称。我已经在代码中将其标识为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
}
我在 JAX-RS 中有以下 POST 响应。
@POST
@Path("/save")
public Response saveS(@FormParam(key) String value) throws SQLException {
return Response.ok("TODO", MediaType.APPLICATION_JSON).build();
}
接收到的参数可以称为 name
或 age
或许多其他名称。我已经在代码中将其标识为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
}