tutorial restful consume java rest jersey media-type

consume - restful java



Jersey REST WS Error: "Falta la dependencia del método... en el parámetro en el índice X" (2)

Estoy teniendo el siguiente error:

Apr 09, 2013 12:24:26 PM com.sun.jersey.spi.inject.Errors processErrorMessages SEVERE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 0 SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 1 SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 2 SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 3 SEVERE: Method, public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String), annotated with POST of resource, class com.package.ImportService, is not recognized as valid resource method.

Tengo un método POST que funciona anteriormente que toma datos de varias partes (una carga de archivo) y luego algunos otros campos de datos de cadena desde el formulario enviado, aquí está el código:

@POST @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("param1") String param1, @FormDataParam("param2") String param2, @FormDataParam("param3") String param3) { .... .... return Response.status(200).entity(getEntity()).build(); }

El error parece estar relacionado con la forma en que Jersey interpreta los parámetros del formulario. aquí está el código que falla:

@POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Path("/local") public Response specifyLocalFile( @FormDataParam("file") String fullFilePath, @FormDataParam("param1") String param1, @FormDataParam("param2") String param2, @FormDataParam("param3") String param3) { .... .... return Response.status(200).entity(getEntity()).build(); }


Después de buscar en Google un poco, termino revisando algunos casos interesantes, como Failed unmarshalling issue with @FormParam , o faltando el problema de la dependencia JAR mulipart, la publicación más aproximada para mi problema fue esta: "falta de dependencia para el método" , que respondo con un enlace a este POST, ya que no veo ninguna solución actual para ese particular.

El problema parecía estar relacionado con la anotación @FormDataParam , cuando se usa con la anotación @Consumes nivel de @Consumes con el valor MediaType.APPLICATION_FORM_URLENCODED .

Cuando cambié la firma de Método para anotar cada campo de texto @FormParam con @FormParam , la excepción desapareció. Verifique el código fijo a continuación:

@POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Path("/local") public Response specifyLocalFile() @FormParam("file") String fullFilePath, @FormParam("param1") String param1, @FormParam("param2") String param2, @FormParam("param3") String param3) { ....

Si el tipo de datos que se reciben no tiene que tratar con codificaciones MIME, la anotación @FormParam intentará tratar los contenidos a través de la serialización; en cambio, la anotación @FormDataParam requiere un manejo específico que se configura cuando la anotación @Consumes tiene el MediaType.MULTIPART_FORM_DATA . Espero que esto ayude.


Tuve el mismo error en mi proyecto.

1) necesitas poner todas las dependencias jersey a la misma versión.

2) También tuve problemas debido a las anotaciones fanfarronas @ApiParam:

@ApiParam(value = "import file", required = true) @FormDataParam("file") InputStream inputStreamCsv

Quitándolos hizo el truco:

@FormDataParam("file") InputStream inputStreamCsv

aquí está el enlace que menciona el problema: https://github.com/swagger-api/swagger-core/issues/1530

Finalmente, todo funcionó con esto:

@POST @Path("/import") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response import( @FormDataParam("file") InputStream inputStreamCsv, @FormDataParam("file") FormDataContentDisposition detailsFichier) {...}