2015-03-24 8 views
16

Ich bin ziemlich neu zu den Webdiensten, also habe ich mit grundlegenden Beispielen begonnen. Dieser bezieht sich auf den Datei-Upload. Ich benutze die neueste (2.17) Version von Jersey-Paket für Nicht-Maven-Entwickler. Es besagt, dass:Kann @FormDataParam in Jersey nicht finden 2.17

bündeln die JAX-RS 2.0 API Glas enthält, alle Jersey Modul Gläser Kern sowie alle 3rd-Party-Abhängigkeiten erforderlich

. Das Problem ist, dass ich diesen Teil zusammenstellen kann:

@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(); 
} 

Es scheint, dass @FormDataParam nicht 2,17 Bündel in Jersey existiert obwohl docs sagt, es tut. Ist das 2.17-Paket unvollständig? Wie kann ich dieses Problem lösen?

Antwort

24

Das Bündel enthält nur die Kernmodule (und ihre Abhängigkeiten). Leider ist Multipart nicht Teil des Kerns. Sie werden this dependency (Maven) benötigen auch

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

Wenn Sie nicht Maven verwenden, von dem, was ich sagen kann, dieser Artefakt hat nur eine andere Abhängigkeit (dh nicht bereits im Paket enthalten ist), und es ist mimepull-1.9.3.

Sie können beide Artefakte herunterladen unter

+0

Ja, das das Problem gelöst. Aber ich frage mich immer noch, warum das Paket für Nicht-Maven-Benutzer nicht vollständig ist oder warum es keine Links auf Jersey-Seite zu den fehlenden Bibliotheken gibt, da sie Teil von Jerseys API-Dokumenten sind? – Rasa

+0

Ich weiß es nicht, aber ich schätze, weil sie vorschlagen, Maven zu verwenden. Alle Abschnitte in der Dokumentation haben Maven-Abhängigkeiten. Ich habe einfach ein Maven-Projekt erstellt und einfach die mehrteiligen Maven-Abhängigkeiten hinzugefügt, um zu sehen, was es eingefangen hat. Es hängt von vielen Gläsern ab, die bereits im Bündel enthalten sind. Ich habe nur verglichen und so habe ich festgestellt, dass der 'mimepull' der einzige andere ist, der benötigt wird. Es ist ein Streit, aber deshalb verwenden wir Maven. Was den Grund dafür betrifft, dass es nicht im Paket enthalten ist, denke ich, weil es viele andere Erweiterungsprojekte gibt. Wenn sie mehrteilig wären, müssten sie alle –

+0

von ihnen einschließen. Und vielleicht wollten sie nur den Kern dessen, was benötigt wird, einbeziehen, da einige Dinge wie JSON-Unterstützung verschiedene Implementierungen haben. Es macht vielleicht keinen Sinn, all diese zusätzlichen Abhängigkeiten von Drittanbietern einzubeziehen, diese Module sind abhängig von –