2016-09-19 137 views
0

我正在使用球衣客户端对API进行REST调用,该API将多层响应中的Json和PDF文件作为响应的第一部分和第二部分返回。Mulipart的Jersey客户端

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文件的字符串响应。 我试图读取该实体为类,然后我得到一个异常邮件正文阅读器未找到媒体类型=多部分/格式数据;边界= ------ ####getMediaType()调用客户端返回multipart/form-data; boundary = ------ ####

使用上述客户端解析这个多部分响应的正确方法是什么?

回答

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的“@products”包含什么都可以。你可以忽略它 – 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