Estoy usando Jersey para implementar una API RESTful que principalmente recupera y sirve datos codificados JSON. Pero tengo algunas situaciones en las que necesito lograr lo siguiente:
- Exporte documentos descargables, como PDF, XLS, ZIP u otros archivos binarios.
- Recupere datos de varias partes, como JSON más un archivo XLS cargado
Tengo un cliente web basado en JQuery de una sola página que crea llamadas AJAX a este servicio web. Por el momento, no envía formularios y usa GET y POST (con un objeto JSON). ¿Debo utilizar una publicación de formulario para enviar datos y un archivo binario adjunto, o puedo crear una solicitud de varias partes con JSON más un archivo binario?
La capa de servicio de mi aplicación crea actualmente un ByteArrayOutputStream cuando genera un archivo PDF. ¿Cuál es la mejor manera de enviar este flujo al cliente a través de Jersey? Creé un MessageBodyWriter, pero no sé cómo usarlo desde un recurso de Jersey. ¿Ese es el enfoque correcto?
He estado mirando las muestras incluidas con Jersey, pero todavía no he encontrado nada que ilustre cómo hacer ninguna de estas cosas. Si importa, estoy usando Jersey con Jackson para hacer Object-> JSON sin el paso XML y realmente no estoy utilizando JAX-RS.
Response
objeto. De esa manera, puede controlar fácilmente el tipo de medio, el código de respuesta HTTP, etc. Avíseme si desea que publique el código.Tuve que devolver un archivo rtf y esto funcionó para mí.
fuente
Estoy usando este código para exportar el archivo de Excel (xlsx) (Apache Poi) en jersey como adjunto.
fuente
He aquí otro ejemplo. Estoy creando un QRCode como PNG a través de un archivo
ByteArrayOutputStream
. El recurso devuelve unResponse
objeto y los datos de la secuencia son la entidad.Para ilustrar el manejo código de respuesta, he añadido el manejo de cabeceras de caché (
If-modified-since
,If-none-matches
, etc).Por favor, no me golpeen en caso de que no
stream.toByteArray()
tenga memoria :) Funciona para mis archivos PNG de <1KB ...fuente
He estado componiendo mis servicios de Jersey 1.17 de la siguiente manera:
FileStreamingOutput
GET
Y el cliente, si lo necesita:
Client
fuente
Este ejemplo muestra cómo publicar archivos de registro en JBoss a través de un recurso de descanso. Tenga en cuenta que el método get utiliza la interfaz StreamingOutput para transmitir el contenido del archivo de registro.
}
fuente
Usar Jersey 2.16 La descarga de archivos es muy fácil.
A continuación se muestra el ejemplo del archivo ZIP
fuente
Encontré lo siguiente útil para mí y quería compartirlo en caso de que le ayude a usted oa otra persona. Quería algo como MediaType.PDF_TYPE, que no existe, pero este código hace lo mismo:
Ver http://jersey.java.net/nonav/apidocs/1.1.0-ea/contribs/jersey-multipart/com/sun/jersey/multipart/file/DefaultMediaTypePredictor.CommonMediaTypes.html
En mi caso, estaba publicando un documento PDF en otro sitio:
Luego, p se pasa como segundo parámetro a post ().
Este enlace me resultó útil al armar este fragmento de código: http://jersey.576304.n2.nabble.com/Multipart-Post-td4252846.html
fuente
Esto funcionó bien conmigo url: http://example.com/rest/muqsith/get-file?filePath=C : \ Users \ I066807 \ Desktop \ test.xml
fuente
Response.ok("file path null").build();
, ¿está realmente bien? Probablemente debería usar algo comoResponse.status(Status.BAD_REQUEST).entity(...
Otro código de muestra donde puede cargar un archivo al servicio REST, el servicio REST comprime el archivo y el cliente descarga el archivo zip del servidor. Este es un buen ejemplo del uso de flujos de entrada y salida binarios con Jersey.
https://stackoverflow.com/a/32253028/15789
Esta respuesta fue publicada por mí en otro hilo. Espero que esto ayude.
fuente