Ho appena iniziato a sviluppare servizi REST, ma mi sono imbattuto in una situazione difficile: inviare file dal mio servizio REST al mio cliente. Finora ho capito come inviare semplici tipi di dati (stringhe, numeri interi, ecc.) Ma l'invio di un file è una questione diversa poiché ci sono così tanti formati di file che non so nemmeno dove dovrei iniziare. Il mio servizio REST è realizzato su Java e sto utilizzando Jersey, invio tutti i dati utilizzando il formato JSON.
Ho letto della codifica base64, alcune persone dicono che è una buona tecnica, altri dicono che non è a causa di problemi di dimensione del file. Qual è il modo corretto? Ecco come appare una semplice classe di risorse nel mio progetto:
import java.sql.SQLException;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import com.mx.ipn.escom.testerRest.dao.TemaDao;
import com.mx.ipn.escom.testerRest.modelo.Tema;
@Path("/temas")
public class TemaResource {
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Tema> getTemas() throws SQLException{
TemaDao temaDao = new TemaDao();
List<Tema> temas=temaDao.getTemas();
temaDao.terminarSesion();
return temas;
}
}
Immagino che il codice per l'invio di un file sarebbe qualcosa del tipo:
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/resourceFiles")
public class FileResource {
@GET
@Produces({application/x-octet-stream})
public File getFiles() throws SQLException{ //I'm not really sure what kind of data type I should return
// Code for encoding the file or just send it in a data stream, I really don't know what should be done here
return file;
}
}
Che tipo di annotazioni dovrei usare? Ho visto alcune persone consigliare per un @GET
utilizzo @Produces({application/x-octet-stream})
, è il modo corretto? I file che sto inviando sono specifici, quindi il client non ha bisogno di sfogliare i file. Qualcuno può guidarmi su come dovrei inviare il file? Dovrei codificarlo usando base64 per inviarlo come oggetto JSON? o la codifica non è necessaria per inviarlo come oggetto JSON? Grazie per qualsiasi aiuto tu possa dare.
java.io.File
(o percorso file) sul tuo server o i dati provengono da qualche altra fonte, come un database, un servizio web, una chiamata al metodo che restituisce unInputStream
?