2014-12-25 7 views
5

Ho un servizio REST Jersey a cui verranno inviati i dati. Ci sarà un file CSV che è il dato reale e alcuni meta-dati per quel CSV (il meta può essere in formato JSON o XML). Come dovrebbe la firma del metodo e accompagnare le annotazioni per il look servizio come se entrambi questi devono essere pubblicato, dovrebbe essere qualcosa di simile ...Jersey Java Rest: Pubblicazione di più tipi di dati (File e JSON)

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces({MediaType.APPLICATION_JSON}) 
public CreateTaskVO provideService(@FormParam("meta") String v1, 
     @FormParam("data") InputStream v2) { 

Eccomi immaginando il primo parametro ad essere una stringa JSON di meta-dati e il secondo un flusso di input dei dati effettivi. Funzionerebbe?

risposta

7

È necessario utilizzare un formato multipart. Fondamentalmente consiste in un singolo messaggio di tipo multipart/xxx (dove xxx può essere qualcosa come form-data) e tale messaggio consiste di altri messaggi "completi" con il proprio tipo di contenuto e altri metadati.

Non hai specificato quale versione Jersey, ma a partire da Jersey 2.xx, c'è il supporto multipart a disposizione, sotto forma di un manufatto a parte:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-multipart</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

Poi basta registrare la funzione , come visto here in Registration.

Poi si può solo utilizzare @FormDataParam

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces({MediaType.APPLICATION_JSON}) 
public CreateTaskVO provideService(
       @FormDataParam("meta") String jsonMeta, 
       @FormDataParam("data") InputStream file, 
       @FormDataParam("data") FormDataContentDisposition fileDetail) { 

Si può vedere here an example di come i dati possono essere inviati dal client, e anche il formato del messaggio interno del corpo di un multipart

Altro rreading:


UPDATE

c'è il supporto anche per più parti a Jersey 1.x.x, sotto forma di questo artefatto

<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-multipart</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 
Problemi correlati