#java #excel #post #jax-rs #mime-types
#java #excel #Публикация #jax-rs #mime-типы
Вопрос:
Вот код для моей службы получения JAX-RS
@GET
@Produces("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
@Path("/xlsReport")
public Response viewXlsReport(@QueryParam("paymentIds")String paymentIds) throws IOException
{
List spaymentIds = Arrays.asList(paymentIds.split(","));
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet s1 = wb.createSheet("Some Details");
File f = new File("Some Details.xslx");
FileOutputStream fos = new FileOutStream(f);
wb.write(fos);
fos.close();
return Response.ok((Object)file).build();
}
И почтовая служба похожа
@POST
@Produces("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
@Path("/exportReport")
@Consumes(MediaType.APPLICATION_JSON)
public Response viewXlsReport(String ids) throws IOException
{
List<string> sIds = new ArrayList<String>();
StringTokenizer tokens = new StringTokenizer(ids,"amp;");
// populate sIds , not used in both GET amp; POST Version
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet s1 = wb.createSheet("Some Details");
File f = new File("Some Details.xslx");
FileOutputStream fos = new FileOutStream(f);
wb.write(fos);
fos.close();
return Response.ok((Object)file).build();
}
Проблема
- xlsx, созданный из GET, открывается нормально ,
- но сообщение из POST выдает ошибку формат или расширение файла недопустимы
Указывает на примечание
- Оба кода одинаковы для создания пустого файла xslx
- Попытался сгенерировать пустой файл xlsx из java main, тот же код, работает нормально
- Я также проверил временные файлы на tomcat, они подходят как для GET, так и для POST, но когда я загружаю их из браузера IE, я получаю сообщение об ошибке открытия файла POST
Единственное отличие заключается в том, что @GET amp; @POST и идентификаторы способа оплаты анализируются, но они не используются, поскольку мы генерируем пустые файлы (на данный момент, будем использовать позже, чтобы попасть в DB и получить некоторые подробности)
На самом деле не уверен, что не так в коде.
Ответ №1:
проблема была на стороне клиента в запросе GET, отправляющем правильный заголовок responseType: ‘arraybuffer’, в POST я не отправлял этот заголовок, отсюда и проблема