如何使用Jersey读取RESTful服务的POST参数?

我没有使用JSON或类似的东西。 我有一个简单的表单来上传文件,我想读取表单的参数。 下面的代码没有按预期工作。 它不会显示任何参数。

@POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Path("{appNum}/{docId}/file") public Response uploadDocFile( @PathParam("appNum") String appNum, @PathParam("docId") String docId, @Context HttpServletRequest req) { try { log.info("POST Parameters:"); Enumeration e = req.getParameterNames(); while(e.hasMoreElements()) { Object key = e.nextElement(); log.info("Key: " + key); log.info("Val: " + req.getParameter(key.toString())); } } catch (Exception e) { e.printStackTrace(); return Response.status(Status.INTERNAL_SERVER_ERROR).entity(new StatusResponse(e)).build(); } return Response.ok().build(); } 

仅供参考,您需要使用@FormParam。 还要确保INPUT HTML类型使用name = not id =。

我也有同样的问题。 对单个参数使用@FormParam注释有效,但是从通过@Context注入的HttpServletRequest读取它们不起作用。 我还尝试使用Provider@RequestParameters>通过Guice获取请求对象/参数。 在这两种情况下都没有post参数。

但是,可以通过向resource方法添加MultivaluedMap参数来获取参数映射。 例:

 @POST public void doSomething(MultivaluedMap formParams) { //... } 

如果您在JAVA中使用Jersey RESTful API ,则可以查找参数注释(@ * Param)

例:

相关性:

  com.sun.jersey jersey-client 1.8  

码:

 package yourpack; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/path_to_data") public class DataResource { @GET @Path("/{param}") public Response getMsg(@PathParam("param") String urlparam) { int ok = 200; String result = "Jersey Data resource: " + urlparam; return Response.status(ok).entity(result ).build(); } } 

注释列表: @ MatrixParam@ HeaderParam@ CookieParam@ FormParam@ QueryParam@ PathParam

在某些时候,Jersey ContainerServlet(或请求处理期间的其他Jersey对象)调用request.getInputStream()或request.getReader(),它将’usingInputStream’或’usingReader’设置为TRUE。 此状态可防止在请求对象内填充参数映射。 像这样的东西:

 parseParameters() { if (usingInputStream || usingReader) { return; } else { parametersMap.putAll({actual parameters parsing from stream}) } } Map getParametersMap() { return parametersMap; } 

尝试在应用程序的第一个入口点(Jersey ServletContainer.service()方法的开头)放置一个断点并评估request.getParametersMap()调用。 你会得到你的参数。