Как получить двоичные данные из ответа на получение с помощью клиента джерси?

Я пытаюсь сделать отдых. Получить вызов с помощью клиента джерси. На основе документов API запрос возвращает изображение в виде двоичных данных. Когда я делаю оставшийся вызов Get с помощью почтальона, я могу вернуть фактическое изображение (я предполагаю, что почтальон преобразует двоичный файл обратно в изображение/png). Это следующие заголовки, возвращаемые почтальоном.

введите здесь описание изображения

Я пытаюсь сделать все остальное, используя трикотажный клиент в java. Вот мой код:

private Client client = ClientBuilder.newClient( new ClientConfig().register(LoggingFilter.class).register(MultiPartFeature.class));
private WebTarget myServer;

myServer= client.target(baseURL);

 public void restGetImage(String requestURL, String headers) {

    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();

    String line;

    MultivaluedMap<String, Object> userHeaders = storeHeadersInMap(headers);

    WebTarget target = getWebTarget().path(requestURL);

    Response response = target.request(MediaType.APPLICATION_OCTET_STREAM)
                     .headers(userHeaders)
                     .get();

    System.out.println("Reuqest URL: " + session.get("baseurl") + requestURL);
    int responseCode = response.getStatus();
    InputStream inputStream = response.readEntity(InputStream.class);

    String contentType = response.getHeaderString("Content-Type");

 //     br = new BufferedReader(new InputStreamReader(inputStream));
//      
//      try {
  //            while((line = br.readLine()) != null) {
  //                sb.append(line);
 //         }
  //            
 //         br.close(); //close buffered reader 
  //        
 //     } catch (IOException e) {
 //         e.printStackTrace();
//          
//      }
//      
//      RestResponse data = new RestResponse(responseCode, sb.toString(), contentType);
//      data.setResponseHeader(response.getHeaders());
//      
//      System.out.println("response code: " + responseCode);
//      System.out.println("response Content-Type: " + contentType);
//      System.out.println("Response body: " + sb.toString());

//      return data;
    }

Пожалуйста, извините все комментарии, потому что я все еще тестирую код. В основном код возвращает статус ответа 200, но когда ему не удается прочитать ответ. Он выдает исключение в InputStream inputStream = response.readEntity(InputStrean.class).

 Apr 22, 2016 11:37:29 AM         
 org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderIn
terceptor aroundReadFrom
SEVERE: MessageBodyReader not found for media type=image/png, type=class   
com.itextpdf.text.pdf.codec.Base64$InputStream, genericType=class   
com.itextpdf.text.pdf.codec.Base64$InputStream.

Моя цель - иметь возможность читать двоичные данные ответа. Любое понимание приветствуется. Спасибо.


person simhuang    schedule 22.04.2016    source источник


Ответы (1)


СЕРЬЕЗНЫЙ: MessageBodyReader не найден для носителя type=image/png, type=class
com.itextpdf.text.pdf.codec.Base64$InputStream, genericType=class
com.itextpdf.text.pdf.codec.Base64 $ Входной поток.

Вы используете неправильный класс InputStream. Вы должны использовать java.io.InputStream . Проверьте и исправьте импорт.

person Paul Samsotha    schedule 22.04.2016
comment
омг ваше право! Большое спасибо. Такая глупая ошибка с моей стороны. Я был так сбит с толку. - person simhuang; 23.04.2016