Я только начал разрабатывать службы REST, но столкнулся с трудной ситуацией: отправка файлов из службы REST моему клиенту. До сих пор я научился отправлять простые типы данных (строки, целые числа и т. Д.), Но отправка файла - это другое дело, поскольку существует так много форматов файлов, что я не знаю, с чего начать. Моя служба REST создана на Java, и я использую Джерси, я отправляю все данные в формате JSON.
Я читал о кодировке base64, некоторые люди говорят, что это хороший метод, другие говорят, что это не из-за проблем с размером файла. Как правильно? Вот как выглядит простой класс ресурсов в моем проекте:
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;
}
}
Я предполагаю, что код для отправки файла будет примерно таким:
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;
}
}
Какие аннотации мне следует использовать? Я видел, как некоторых людей рекомендуют @GET
использовать @Produces({application/x-octet-stream})
, это правильный путь? Файлы, которые я отправляю, являются конкретными, поэтому клиенту не нужно просматривать файлы. Может ли кто-нибудь объяснить мне, как мне отправить файл? Должен ли я кодировать его с помощью base64, чтобы отправить его как объект JSON? или кодировка не требуется, чтобы отправить его как объект JSON? Спасибо за любую помощь, которую вы можете оказать.
java.io.File
(или путь к файлу) на вашем сервере или данные поступают из какого-то другого источника, такого как база данных, веб-служба, вызов метода, возвращающийInputStream
?