J'utilise Jersey pour implémenter une API RESTful qui récupère et sert principalement des données codées JSON. Mais j'ai des situations dans lesquelles je dois accomplir les tâches suivantes:
- Exportez des documents téléchargeables, tels que PDF, XLS, ZIP ou autres fichiers binaires.
- Récupérer des données en plusieurs parties, telles que JSON plus un fichier XLS téléchargé
J'ai un client Web basé sur JQuery d'une seule page qui crée des appels AJAX vers ce service Web. Pour le moment, il ne soumet pas de formulaire et utilise GET et POST (avec un objet JSON). Dois-je utiliser une publication de formulaire pour envoyer des données et un fichier binaire joint, ou puis-je créer une demande en plusieurs parties avec JSON plus un fichier binaire?
La couche de service de mon application crée actuellement un ByteArrayOutputStream lorsqu'elle génère un fichier PDF. Quelle est la meilleure façon de transmettre ce flux au client via Jersey? J'ai créé un MessageBodyWriter, mais je ne sais pas comment l'utiliser à partir d'une ressource Jersey. Est-ce la bonne approche?
J'ai parcouru les exemples inclus avec Jersey, mais je n'ai encore rien trouvé qui illustre comment faire l'une ou l'autre de ces choses. Si cela compte, j'utilise Jersey avec Jackson pour faire Object-> JSON sans l'étape XML et je n'utilise pas vraiment JAX-RS.
Response
objet. De cette façon, vous pouvez facilement contrôler le mediatype, le code de réponse HTTP, etc. Faites-moi savoir si vous voulez que je poste du code.J'ai dû retourner un fichier rtf et cela a fonctionné pour moi.
la source
J'utilise ce code pour exporter le fichier Excel (xlsx) (Apache Poi) dans jersey en tant que pièce jointe.
la source
Voici un autre exemple. Je crée un QRCode au format PNG via un fichier
ByteArrayOutputStream
. La ressource renvoie unResponse
objet et les données du flux sont l'entité.Pour illustrer la manipulation du code de réponse, j'ai ajouté le traitement des en- têtes de cache (
If-modified-since
,If-none-matches
, etc.).S'il vous plaît ne me battez pas au cas où il
stream.toByteArray()
n'y aurait pas de mémoire :) Cela fonctionne pour mes fichiers PNG <1 Ko ...la source
J'ai composé mes services Jersey 1.17 de la manière suivante:
FileStreamingOutput
GET
Et le client, si vous en avez besoin:
Client
la source
Cet exemple montre comment publier des fichiers journaux dans JBoss via une ressource rest. Notez que la méthode get utilise l'interface StreamingOutput pour diffuser le contenu du fichier journal.
}
la source
Utilisation de Jersey 2.16 Le téléchargement de fichiers est très simple.
Voici l'exemple du fichier ZIP
la source
J'ai trouvé ce qui suit utile pour moi et je voulais partager au cas où cela vous aiderait ou aider quelqu'un d'autre. Je voulais quelque chose comme MediaType.PDF_TYPE, qui n'existe pas, mais ce code fait la même chose:
Voir http://jersey.java.net/nonav/apidocs/1.1.0-ea/contribs/jersey-multipart/com/sun/jersey/multipart/file/DefaultMediaTypePredictor.CommonMediaTypes.html
Dans mon cas, je publiais un document PDF sur un autre site:
Ensuite, p est passé comme deuxième paramètre à post ().
Ce lien m'a été utile pour assembler cet extrait de code: http://jersey.576304.n2.nabble.com/Multipart-Post-td4252846.html
la source
Cela a bien fonctionné avec moi url: http://example.com/rest/muqsith/get-file?filePath=C : \ Users \ I066807 \ Desktop \ test.xml
la source
Response.ok("file path null").build();
, est-ce vraiment ok? Vous devriez probablement utiliser quelque chose commeResponse.status(Status.BAD_REQUEST).entity(...
Un autre exemple de code dans lequel vous pouvez télécharger un fichier vers le service REST, le service REST zippe le fichier et le client télécharge le fichier zip à partir du serveur. Ceci est un bon exemple d'utilisation de flux d'entrée et de sortie binaires à l'aide de Jersey.
https://stackoverflow.com/a/32253028/15789
Cette réponse a été publiée par moi dans un autre fil de discussion. J'espère que cela t'aides.
la source