REST hizmetlerini yeni geliştirmeye başladım, ancak zor bir durumla karşılaştım: REST hizmetimden müşterime dosya göndermek. Şimdiye kadar basit veri türlerini (dizeler, tam sayılar, vb.) Nasıl göndereceğimi anladım, ancak bir dosya göndermek farklı bir konu çünkü o kadar çok dosya biçimi var ki nereden başlamam gerektiğini bile bilmiyorum. REST servisim Java üzerinde yapılıyor ve Jersey kullanıyorum, tüm verileri JSON formatını kullanarak gönderiyorum.
Base64 kodlaması hakkında bir şeyler okudum, bazıları bunun iyi bir teknik olduğunu söylüyor, diğerleri bunun dosya boyutu sorunları yüzünden olmadığını söylüyor. Doğru yol nedir? Projemdeki basit bir kaynak sınıfı şöyle görünüyor:
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;
}
}
Bir dosya göndermek için kodun aşağıdaki gibi olacağını tahmin ediyorum:
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;
}
}
Ne tür ek açıklamalar kullanmalıyım? Bazı insanlar bir tavsiye gördüm @GET
kullanarak @Produces({application/x-octet-stream})
, doğru bir şekilde bu? Gönderdiğim dosyalar belirli dosyalar olduğundan, istemcinin dosyalara göz atması gerekmiyor. Dosyayı nasıl göndermem gerektiği konusunda bana yol gösteren var mı? JSON nesnesi olarak göndermek için base64 kullanarak kodlamalı mıyım? veya kodlama, onu JSON nesnesi olarak göndermek için gerekli değil mi? Verebileceğiniz her türlü yardım için teşekkürler.
java.io.File
Sunucunuzda gerçek bir (veya dosya yolu) var mı yoksa veri veritabanı, web hizmeti, yöntem çağrısı gibi başka bir kaynaktan mı geliyorInputStream
?