Impossibile implementare il caricamento di file semplice utilizzando Jersey. Mancante errori di dipendenza sollevate al bootstrap applicazione:Impossibile implementare il caricamento di file semplice in Jersey - "annotato con POST di risorsa, classe non riconosciuta come metodo di risorsa valido. Non disponibile"
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.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1
SEVERE: Method, public javax.ws.rs.core.Response com.foo.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.foo.FS2Resource, is not recognized as valid resource method.
unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
Sembra che ci sia un problema con la mappatura dei parametri di input a un servizio REST? Ho letto la documentazione e ho seguito diversi esempi, e non mi sto allontanando da questi esempi.
Ecco il codice:
@Path("v1/")
public class FileUploadResource {
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public Response uploadFile(
@FormDataParam("file") InputStream is,
@FormDataParam("file") FormDataContentDisposition detail) {
String name = detail.getFileName();
// do upload stuff
String output = ....
return Response.status(200).entity(output).build();
}
}
ho tirato in "compilazione 'com.sun.jersey.contribs: jersey-multipart: 1.17.1'" per i FormDataParams.
EDIT: ero in grado di farlo funzionare a Jersey, ma solo in questo più primitivo di moda:
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadFile(final MimeMultipart file) {
if (file == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("Must supply a valid file").build();
try {
for (int i = 0; i < file.getCount(); i++) {
// ... do something with file.getBodyPart(i));
}
return Response.ok("done").build();
} catch (final Exception e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build();
}
}
Questa è probabilmente una soluzione sufficiente, ma desidera comunque andare a fondo della problema.
realtà sto correndo in un problema simile. Ho la stessa versione corrispondente di tutti i jersey jersey richiesti e ognuno dei miei valori di FormDataParam è diverso per evitare il problema di mappatura futura. Tuttavia, ho ancora il problema del bootstrap. C'è un problema con l'uso delle annotazioni Post e Produces insieme o qualcosa del genere? L'unico metodo con cui ho avuto questo problema è il mio Post. –
Mi è stato detto da un collega che si tratta di un bug noto e che la ragione per cui funziona è che ha a che fare con la distribuzione/configurazione specifica con cui si sta lavorando. –
Un bug su cosa, esattamente? L'annotazione FormDataParam o Jersey? –