multipart/mixed и application/octet-stream

У меня есть веб-сервис на основе джерси, который выдает "multipart/mixed" RESPONSE следующим образом: метод читает файл и должен вернуть его в формате октетов.

    @GET
        @Produces("multipart/mixed")
        public byte[] getDocumentContents(@Context HttpHeaders header){
    ....
    ....
    ....
    os = new ByteArrayOutputStream();
    ....
    ....
    ....
    return os;
    }

У меня вопрос: как мне убедиться, что ответ имеет тип OCTET-STREAM? Я знаю, что мог бы также просто аннотировать вышеупомянутый метод как:

@Produces("application/octet-stream")

Но я специально требую установить RESPONSE content-Type как "multipart / mixed" при отправке файла в формате потока октетов.

Вышеупомянутый метод делает это? Я предполагаю, что это так, но у меня нет конкретной причины, как это сделать.

заранее спасибо!

1 ответ

Решение

Я не думаю, что "multipart/mixed" является допустимым типом носителя, который должен быть возвращен методом REST. На мой взгляд, правильный путь будет следующим:

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getDocumentContents(@HeaderParam("your header param") final YourHeaderParamUserType headerParam) {
    byte[] outByteArray = ... obtain byte array
    return Response.ok()
           .entity(outByteArray)
           .build();
}

Обрати внимание на:

  • @Produces (MediaType.APPLICATION_OCTET_STREAM)
  • Параметр, который вы, возможно, захотите "извлечь" из заголовка, можно получить с помощью параметра в функции, например:

    @HeaderParam ("ваш параметр заголовка") final YourHeaderParamUserType headerParam

Единственное, что вам не нужно забывать в "YourHeaderParamUserType", это:

  • Включить конструктор из строки
  • ... или включить статический метод fromString(String)
  • ... или включить статический метод valueOf(String)
Другие вопросы по тегам