Весенний шаблон REST для байта

Я извлекаю массив байтов, используя шаблон отдыха Spring Framework, но мне также нужно получить Mediatype этого байта.

MediaType этого массива байтов может быть любого типа.

Код, используемый сейчас для получения байта, приведен ниже.

   HttpHeaders headers = new HttpHeaders();
   headers.setAccept(Collections.singletonList(MediaType.valueOf("application/pdf")));
   ResponseEntity<byte[]> result = restTemp.exchange(url, HttpMethod.GET, entity, byte[].class,documentId);

Приведенный выше код будет извлекать только тип содержимого pdf.

Как настроить contentType на прием любого универсального MediaType, потому что служба на другом конце предоставляет любой случайный MediaType для byteArray.

Может кто-нибудь предложить, как можно получить MediaType.

Приветствуются любые предложения..


person Tiny    schedule 04.11.2016    source источник


Ответы (4)


Просто не отправляйте заголовок accept, чтобы сервер не возвращал этот content-type. Это то же самое, что отправить подстановочный знак */*

//HttpHeaders headers = new HttpHeaders();
//headers.setAccept(Collections.singletonList(MediaType.WILDCARD));
ResponseEntity<byte[]> result = restTemp.exchange(url, HttpMethod.GET, entity, byte[].class,documentId);

После этого извлеките content-type из заголовков ответа.

 byte body[] = result.getBody();
 MediaType contentType = result.getHeaders().getContentType();
person pedrofb    schedule 04.11.2016

Вы можете сохранить тип мультимедиа в заголовках HTTP и использовать, например, ResponseEntity.getHeaders(). или вы можете обернуть массив байтов и тип носителя в класс держателя.

person toootooo    schedule 04.11.2016
comment
Спасибо за ответ. Да, это даст мне MediaType, но только тот, который установлен в acceptHeader. Но bytearray может быть чем угодно, например файлом pdf, jpg, png или txt. - person Tiny; 04.11.2016

MediaType mediaType = result.getHeaders().getContentType();

person Andy W    schedule 04.11.2016
comment
Привет, Энди, спасибо за ответ. Да, это даст мне MediaType, но только тот, который установлен в acceptHeader. Но bytearray может быть чем угодно, например файлом pdf, jpg, png или txt. - person Tiny; 04.11.2016
comment
Это не тот, который установлен в заголовке принятия, он устанавливается сервером, когда он создает ответ. Если сервер устанавливает MediaType на основе того, что представляет массив байтов (например, application/pdf для файла pdf), вы можете использовать заголовок Content-Type как таковой. - person Andy W; 04.11.2016

Вы можете установить MediaType как application/octet-stream , посмотрите здесь

person developer    schedule 04.11.2016