Java 如何从Jersey的POST方法读取所有未知的表单参数使用MediaType.APPLICATION\u Form\u URLENCODED

Java 如何从Jersey的POST方法读取所有未知的表单参数使用MediaType.APPLICATION\u Form\u URLENCODED,java,rest,post,jersey,put,Java,Rest,Post,Jersey,Put,对于应用程序/x-www-form-urlencoded内容类型,多值映射(jersey)为空,参数未知,因此无法使用@FormParam 这只发生在POSThttp方法中,但使用PUT方法时,一切都按预期进行。也就是说,对于相同内容类型的PUT请求,多值映射不是空的 下面是代码片段 @POST @Consumes("application/x-www-form-urlencoded") public Response processPostRequestFormURLEncodedMedia(

对于
应用程序/x-www-form-urlencoded
内容类型,
多值映射(jersey)为空,参数未知,因此无法使用
@FormParam

这只发生在POSThttp方法中,但使用PUT方法时,一切都按预期进行。也就是说,对于相同内容类型的PUT请求,多值映射不是空的

下面是代码片段

@POST
@Consumes("application/x-www-form-urlencoded")
public Response processPostRequestFormURLEncodedMedia(
        @HeaderParam(REFERER) String referer,
        @Context final UriInfo uriInfo,
        @Context final HttpHeaders httpHeaders,
        @Context final Request request,
        MultivaluedMap<String, String> formParams) {
  ...
}
@POST
@使用(“应用程序/x-www-form-urlencoded”)
公共响应流程PostRequestFormUrlEncodedMedia(
@HeaderParam(REFERER)字符串REFERER,
@上下文最终UriInfo UriInfo,
@上下文最终HttpHeaders HttpHeaders,
@上下文最终请求,
多值映射(formParams){
...
}

提前感谢。

如果您使用
表单而不是
多值map
,会发生什么情况?这是一个已知的问题。根据我的记忆,甚至应该有一个关于它的日志警告,说您应该使用
@FormParam
。我忘了我以前是怎么做到的。必须使用ContainerRequest中的属性来提取它。好的,我没有尝试。但我想这就是我所做的。将带有
@Context
ContainerRequest
注入方法,然后使用
cr.getProperty(InternalServerProperties.FORM\u DECODED\u属性)
。我认为应该返回一个
表单
。我只是简单地看了一下谢谢,Peeskillet,谢谢你宝贵的时间和反馈,通过你的解决方案,我可以解决这个问题。如果你使用
表单而不是
多值映射
,会发生什么?这是一个已知的问题。根据我的记忆,甚至应该有一个关于它的日志警告,说您应该使用
@FormParam
。我忘了我以前是怎么做到的。必须使用ContainerRequest中的属性来提取它。好的,我没有尝试。但我想这就是我所做的。将带有
@Context
ContainerRequest
注入方法,然后使用
cr.getProperty(InternalServerProperties.FORM\u DECODED\u属性)
。我认为应该返回一个
表单
。我只是简单地看了一下谢谢你,Peeskillet,谢谢你宝贵的时间和反馈,有了你的解决方案,我可以解决这个问题。