Вызов AngularJS в службу JAX-RS, возвращающий (415 неподдерживаемых типов носителей)

#angularjs #rest #csv #jax-rs

#angularjs #rest #csv-файл #джакс-рс

Вопрос:

Я боролся с этим весь день и не могу разобраться с проблемой. Я получил веб-сервис JAX-RS, который должен возвращать файл CSV в формате ByteArray клиенту AngularJS: код службы следующий

 @POST
@Path("/{id_user}/transactionsCsv")
@Produces({MediaType.APPLICATION_OCTET_STREAM})
@ApiOperation(value = "Transactions de l'utilisateur connecté sous forme   CSV",response = byte[].class)
@RolesAllowed(value = SecurityRoles.PORTAIL_ACTIVITE_RUBRIQUE)
public Response getOperationsCsv(@PathParam("id_user") long id_user,
                              @Context HttpServletRequest request, final TransactionFiltreDTO filtre) throws MalformedURLException {    

    //CsvContent is a StringBuilder converted to a byte array 
    byte [] CsvContent = csvExportService.buildCsv();

    ResponseBuilder response = Response.ok(new ByteArrayInputStream(CsvContent));

    response.header(HttpHeaders.CONTENT_DISPOSITION, 
                    "attachment; filename=" "activite" ".csv")
                    .header(HttpHeaders.CONTENT_TYPE, "application/csv");

    return response.build(); 
 

}

И это мой вызов AngularJS :

  fetchCsv: function() {
     return $http({
       url: SERVER_CONTEXT   '/rest/utilisateurs/'   Session.id   '/transactionsCsv',
       method: 'POST',
       params: {},
       headers: {
         'Content-type': 'application/csv'
       },
       responseType: 'arraybuffer',
       timeout: '20000'
     });
   },
 

Проблема в том, что вызов возвращает: 415 (неподдерживаемый тип носителя)!
Кто-нибудь может сказать мне, не упускаю ли я чего-то в своем коде на стороне сервера или на стороне клиента?
Спасибо 🙂

Комментарии:

1. text/csv — это обычный тип содержимого для csv. Возможно, вы захотите попробовать это

2. Пробовал text / csv, но все равно возвращал ту же ошибку

3. MediaType.APPLICATION_OCTET_STREAM также снова предложите другой тип контента. Кроме того, вы используете POST для того, что должно было быть GET. Вы также не отправляете какой-либо текст / csv в своем теле (подразумевая, что вам нужен тип содержимого), но вы запрашиваете его (подразумевая, что вам нужен заголовок Accept). Все это исходит от кого-то, кто никогда не писал java или JAX-RS. Но это куча проблем, которые я вижу на поверхности.

4. Я перепробовал все возможные комбинации, но, похоже, ничего не работает:/ Есть еще области, которые я могу исследовать?

5. Трудно сказать, правильно ли вы внесли эти изменения, потому что вопрос здесь все тот же. Я почти уверен, что это связано с вашей неправильной обработкой заголовков content-type / accept.