Estou usando Jersey para implementar uma API RESTful que basicamente recupera e fornece dados codificados em JSON. Mas tenho algumas situações em que preciso realizar o seguinte:
- Exporte documentos para download, como PDF, XLS, ZIP ou outros arquivos binários.
- Recupere dados multipartes, como JSON mais um arquivo XLS carregado
Eu tenho um cliente da web baseado em JQuery de página única que cria chamadas AJAX para este serviço da web. No momento, ele não envia formulários e usa GET e POST (com um objeto JSON). Devo utilizar uma postagem de formulário para enviar dados e um arquivo binário anexado ou posso criar uma solicitação multiparte com JSON mais o arquivo binário?
A camada de serviço do meu aplicativo atualmente cria um ByteArrayOutputStream ao gerar um arquivo PDF. Qual é a melhor maneira de enviar esse stream para o cliente via Jersey? Criei um MessageBodyWriter, mas não sei como usá-lo de um recurso de Jersey. Essa é a abordagem certa?
Estive olhando os exemplos incluídos em Jersey, mas ainda não encontrei nada que ilustre como fazer qualquer uma dessas coisas. Se for importante, estou usando Jersey com Jackson para fazer Object-> JSON sem a etapa XML e não estou realmente utilizando JAX-RS.
Response
objeto. Dessa forma, você pode controlar facilmente o tipo de mídia, o código de resposta HTTP, etc. Deixe-me saber se você deseja que eu poste o código.Eu tive que retornar um arquivo rtf e isso funcionou para mim.
fonte
Estou usando este código para exportar o arquivo excel (xlsx) (Apache Poi) em jersey como um anexo.
fonte
Aqui está outro exemplo. Estou criando um QRCode como PNG por meio de um
ByteArrayOutputStream
. O recurso retorna umResponse
objeto e os dados do fluxo são a entidade.Para ilustrar a manipulação de código de resposta, adicionei manuseamento de cabeçalhos de cache (
If-modified-since
,If-none-matches
, etc.).Por favor, não me bata no caso de
stream.toByteArray()
não haver memória :) Funciona para meus arquivos PNG <1 KB ...fonte
Tenho redigido meus serviços Jersey 1.17 da seguinte maneira:
FileStreamingOutput
GET
E o cliente, se precisar:
Client
fonte
Este exemplo mostra como publicar arquivos de log no JBoss por meio de um recurso rest. Observe que o método get usa a interface StreamingOutput para transmitir o conteúdo do arquivo de log.
}
fonte
Usar o Jersey 2.16 é muito fácil baixar arquivos.
Abaixo está o exemplo para o arquivo ZIP
fonte
Achei o seguinte útil para mim e gostaria de compartilhar, caso isso ajude você ou outra pessoa. Eu queria algo como MediaType.PDF_TYPE, que não existe, mas este código faz a mesma coisa:
Vejo http://jersey.java.net/nonav/apidocs/1.1.0-ea/contribs/jersey-multipart/com/sun/jersey/multipart/file/DefaultMediaTypePredictor.CommonMediaTypes.html
No meu caso, estava postando um documento PDF em outro site:
Então p é passado como o segundo parâmetro para post ().
Este link foi útil para eu juntar este snippet de código: http://jersey.576304.n2.nabble.com/Multipart-Post-td4252846.html
fonte
Isso funcionou bem comigo url: http://example.com/rest/muqsith/get-file?filePath=C : \ Users \ I066807 \ Desktop \ test.xml
fonte
Response.ok("file path null").build();
, está tudo bem? Você provavelmente deve usar algo comoResponse.status(Status.BAD_REQUEST).entity(...
Outro código de amostra em que você pode fazer upload de um arquivo para o serviço REST, o serviço REST compacta o arquivo e o cliente baixa o arquivo compactado do servidor. Este é um bom exemplo de como usar fluxos de entrada e saída binários usando Jersey.
https://stackoverflow.com/a/32253028/15789
Esta resposta foi postada por mim em outro tópico. Espero que isto ajude.
fonte