¿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();
}
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=.
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) {
//...
}
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
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.
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