servicio pathparam parametros ejemplo crear consumir con cliente java rest jersey

pathparam - rest json java



¿Cómo leo los parámetros POST para un servicio RESTful usando Jersey? (4)

No estoy usando JSON ni nada de eso. Tengo un formulario simple para cargar un archivo y quiero leer los parámetros del formulario. El siguiente código no funciona como se esperaba. No mostrará ningún parámetro.

@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(); }


En algún momento del tiempo, el ContainerServlet de Jersey (u otro objeto de Jersey durante el procesamiento de la solicitud) llama a request.getInputStream () o request.getReader () que estableció "usingInputStream" o "usingReader" en TRUE Este estado evita que se complete el mapa de parámetros dentro del objeto de solicitud. Algo como esto:

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

Intente colocar un punto de interrupción en el primer punto de entrada (al comienzo del método de ServletContainer.service () de Jersey) de su aplicación y evalúe la llamada request.getParametersMap (). Obtendrás tus parámetros.


Para tu información, necesitas usar @FormParam. También asegúrese de que los tipos HTML de ENTRADA estén usando name = not id =.


Si está utilizando la API RESTful de Jersey en JAVA, puede buscar Anotaciones de parámetros (@ * Param)

Ejemplo:

Dependencia:

<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.8</version> </dependency>

Código:

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(); } }

Lista de anotaciones: @MatrixParam , @HeaderParam , @CookieParam , @FormParam , @QueryParam , @PathParam


Tengo el mismo problema. El uso de la anotación @FormParam para parámetros individuales funciona, pero leerlos desde HttpServletRequest inyectado a través de @Context no lo hace. También intenté obtener el objeto / los parámetros de la solicitud a través de Guice utilizando Provider<HttpServletRequest> y @RequestParameters<Map<String, String[]>> . En ambos casos no hubo parámetros post.

Sin embargo, es posible obtener un mapa de parámetros agregando un parámetro MultivaluedMap<String, String> al método de recursos. Ejemplo:

@POST public void doSomething(MultivaluedMap<String, String> formParams) { //... }