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


No estoy usando JSON ni nada por el estilo. Tengo un formulario simple para subir 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();
}
Author: Triton Man, 2011-05-23

4 answers

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

 23
Author: Triton Man,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-23 12:55:15

Tengo el mismo problema. Usar la anotación @FormParam para parámetros individuales funciona, pero leerlos desde HttpServletRequest inyectados a través de @Context no lo hace. También traté de obtener el objeto/parámetros de solicitud a través de Guice usando 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 resource. Ejemplo:

@POST
public void doSomething(MultivaluedMap<String, String> formParams) {
//...
}
 19
Author: Jamol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-28 07:44:21

Si está utilizando Jersey RESTful API 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

 5
Author: Veniamin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-17 17:34:22

En algún momento Jersey ContainerServlet (u otro objeto Jersey durante el procesamiento de solicitudes) llama a request.getInputStream () o request.getReader () que establece 'usingInputStream' o 'usingReader' en TRUE. Este estado impide que se rellene 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 poner un punto de ruptura en el primer punto de entrada (comienzo de Jersey ServletContainer.servicio () método) de su aplicación y evaluar solicitud.Llamada a getParametersMap (). Obtendrás tus parámetros.

 2
Author: Pavel Mikhalchuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-03 13:09:38