2015-03-24 16 views
16

Sono abbastanza nuovo per i servizi Web, quindi ho iniziato con esempi di base. Questo si riferisce al caricamento di file. Sto usando l'ultima versione (2.17) del pacchetto Jersey per sviluppatori non professionisti. Si precisa che:Impossibile trovare @FormDataParam in Jersey 2.17

pacchetto contiene i JAX-RS 2.0 vaso API, tutti i vasetti modulo Jersey nucleo così come tutte le dipendenze 3a parti necessarie

. Il problema è che non riesco a compilare questa parte:

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream, 
    @FormDataParam("file") FormDataContentDisposition fileDetail) { 
    String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName(); 
    // save it 
    writeToFile(uploadedInputStream, uploadedFileLocation); 
    String output = "File uploaded to : " + uploadedFileLocation; 
    return Response.status(200).entity(output).build(); 
} 

Sembra che @FormDataParam non esiste in Jersey 2.17 fascio anche documenti dice che fa. Il pacchetto 2.17 è incompleto? Come posso risolvere questo problema?

risposta

24

Il pacchetto include solo i moduli principali (e le relative dipendenze). Sfortunatamente, Multipart non fa parte del nucleo. Avrete bisogno this dependency (Maven) anche

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-multipart</artifactId> 
    <version>2.17</version> 
</dependency 

Se non si utilizza Maven, da quello che posso dire, questo manufatto ha una sola altra dipendenza (che non è già incluso nel pacchetto), ed è mimepull-1.9.3.

È possibile scaricare entrambi i manufatti sotto

+0

Sì, che ha risolto il problema. Ma, mi chiedo ancora, perché il bundle per utenti non-maven non è completo o perché non vi sono collegamenti sul sito di Jersey alle librerie mancanti in quanto fanno parte dei documenti API di Jersey? – Rasa

+0

Non lo so, ma immagino perché suggeriscono di usare Maven. Tutte le sezioni nella documentazione hanno dipendenze Maven. Ho semplicemente creato un progetto Maven, e ho appena aggiunto le dipendenze Maven multipart e visto cosa ha tirato dentro. Dipende da un sacco di barattoli già presenti nel pacchetto. Ho appena confrontato ed è così che ho scoperto che il 'mimepull' era l'unico altro necessario. È una seccatura, ma è per questo che usiamo Maven. Per quanto riguarda il motivo per cui non è nel pacchetto, immagino perché ci sono molti altri progetti di estensione. Se incidessero in più parti, avrebbero dovuto includere tutti gli –

+0

di essi. E forse volevano solo includere il nucleo di ciò che è necessario, perché alcune cose come il supporto JSON hanno implementazioni differenti. Potrebbe non avere senso includere tutte quelle dipendenze extra di terze parti, quelle modulo dipendono da –