2016-09-19 7 views
0

저지 클라이언트를 사용하여 응답의 첫 번째와 두 번째 부분으로 mulipart에서 Json 및 PDF 파일을 반환하는 API에 대한 REST 호출을 수행합니다.Mulipart 저지 클라이언트 호출

final Client client = ClientBuilder.newClient(); 
final WebTarget target = client.target(endPoint); 
final Builder request = target.request().header("Authorization", authKey); 
final Response response = request.get(); 
final String readEntity = response.readEntity(String.class); 

이 코드는 바이트 코드 형식의 PDF 파일과 함께 문자열 응답을 반환합니다. 개체를 MultiPart 클래스로 읽은 다음 예외가 발생했습니다. 메시지 본문 판독기 미디어 유형 = multipart/form-data; 경계 = ------ ####에 대해 찾을 수 없습니다. 클라이언트의 getMediaType() 호출은 multipart/form-data를 반환합니다. 경계 = ------ ####.

위 클라이언트를 사용하여이 멀티 파트 응답을 구문 분석하는 올바른 방법은 무엇입니까?

답변

1

신속한 Google 검색 결과를 제공합니다. 당신은 MultiPartFeature를 활성화해야합니다 그리고 당신은

response.readEntity(InputStream.class)http://www.benchresources.net/jersey-2-x-web-service-for-uploadingdownloading-zip-file-java-client/

// invoke service after setting necessary parameters 
     clientConfig = new ClientConfig(); 
     clientConfig.register(MultiPartFeature.class); 
     client = ClientBuilder.newClient(clientConfig); 
     client.property("accept", "application/zip"); 
     webTarget = client.target(httpURL); 

     // invoke service 
     invocationBuilder = webTarget.request(); 
     //   invocationBuilder.header("Authorization", "Basic " + authorization); 
     response = invocationBuilder.get(); 

     // get response code 
     responseCode = response.getStatus(); 
     System.out.println("Response code: " + responseCode); 

     if (response.getStatus() != 200) { 
      throw new RuntimeException("Failed with HTTP error code : " + responseCode); 
     } 

     // get response message 
     responseMessageFromServer = response.getStatusInfo().getReasonPhrase(); 
     System.out.println("ResponseMessageFromServer: " + responseMessageFromServer); 

     // read response string 
     inputStream = response.readEntity(InputStream.class); 
     qualifiedDownloadFilePath = DOWNLOAD_FILE_LOCATION + "MyJerseyZippedFile.zip"; 
     outputStream = new FileOutputStream(qualifiedDownloadFilePath); 
     byte[] buffer = new byte[1024]; 
     int bytesRead; 
     while ((bytesRead = inputStream.read(buffer)) != -1) { 
      outputStream.write(buffer, 0, bytesRead); 
     } 
+0

Json이 내 응답에서 PDF를 따르는 동안 client.property의 데이터는 무엇이되어야합니까? – amitdonanand

+0

API의 '@ produce'에 포함 된 내용이 무엇이든됩니다. 무시할 수도 있습니다. – sinu

0

다음 코드가 도움이되기를 바랍니다.

Client client = Client.create(); 
client.addFilter(new HTTPBasicAuthFilter(username,password)) 
WebResource webResource = client.resource("URL"); 
ClientResponse response = webResource.accept("*/*").type(MediaType.APPLICATION_OCTET_STREAM).get(ClientResponse.class); 
Assert.assertEquals(response.getStatus(), 200); 
MultivaluedMap<String, String> headers = response.getHeaders(); 
System.out.println("Content-Disposition :" + headers.get("Content-Disposition")); 
List<String> filename=headers.get("Content-Disposition"); 
file_name=filename.get(0); 
file_name=file_name.substring(file_name.indexOf("\"")+1,file_name.lastIndexOf("\"")); 
File file=new File(file_name); 
if(!file.exists()) { 
    file.createNewFile(); 
} 
InputStream inputStream=response.getEntityInputStream(); 
FileOutputStream fileStream = 
     new FileOutputStream(file); 
IOUtils.copy(inputStream, fileStream); 
fileStream.flush(); 
fileStream.close(); 
Assert.assertTrue(file.length()>0); 
//Deleting the backup file 
file.delete(); 
+0

webResource의 데이터 유형은 무엇입니까에서 아래의 코드를 있나? – amitdonanand