2016-07-26 114 views
1

我有低於此下載與內容c50c4a23307529b59797525c52b2c50c * file1.zip將多個響應到一個響應

現在我想file1Response和file2Response &回報JSON組合文件。如何做到這一點的幫助?

@GET 
@Path("/" + getfileschecksum) 
@Produces("application/json") 
public Response getFilesChecksum() { 
     String fileid1 = "file1"; 
     String fileid2 = "file2"; 


     Response file1Response = getChecksum(fileid1); 
     Response file2Response = getChecksum(fileid2); 

     return file1Response; 


    } 

嘗試添加一個ArrayList如下:

@GET 
    @Path("/" + getfileschecksum) 
    @Produces("application/json") 
    public Response getFilesChecksum() { 
      String fileid1 = "file1"; 
      String fileid2 = "file2"; 

      ArrayList<Response> rp = new ArrayList<Response>(); 

      Response file1Response = getChecksum(fileid1); 
      Response file2Response = getChecksum(fileid2); 

      rp.add(file1Response); 
      rp.add(file2Response); 
      return Response.ok(rp).build(); 


     } 

被返回錯誤com.sun.jersey.api.MessageException:消息正文寫入器,用於Java類的java.util.ArrayList和Java未找到類型類java.util.ArrayList和MIME媒體類型application/json。

file1Response來自下面,可以在下面改變任何東西來返回字符串。

  URL url = new URL(binpath); 
      URLConnection connection = url.openConnection(); 
      InputStream is = connection.getInputStream(); 
      String mt = connection.getContentType(); 
      ResponseBuilder response = Response.ok((Object) is, mt); 
      response.header("Content-Disposition","attachment; filename=" + binpath.substring(binpath.lastIndexOf('/') + 1, binpath.length())); 
      return response.build(); 
+0

我假設Response是javax.ws.rs.core.Response對象。首先這是行不通的,因爲它是一個接口,你必須添加@JsonTypeInfo來告訴序列化器如何序列化它。您需要將ArrayList轉換爲ArrayList ,並將實際的字符串值放在那裏,而不是Response對象。 –

+0

我試過file1Response.getEntity()。toString(),但是這會返回[email protected]而不是實際的內容。如何從響應中獲取字符串? – Newbie

回答

0

嘗試:

StringBuffer response = new StringBuffer(); 
response.append(file1Response); 
response.append(file2Response); 

return response.toString(); 

沒有壞處,如果它不工作,只是想幫助。 但如果它豎起大拇指。

+0

沒有工作,也沒有從file1Response中返回內容。 – Newbie

0

我建議你創建另一個實際返回字符串校驗和的方法,然後讓你的資源方法調用它。

@GET 
@Path("{file}/checksum") 
Response getChecksum(@PathParam("file") final String file) { 
    return Response.ok(calculateChecksum(file)).build(); 
} 


@POST 
@Path("checksums") 
Response getChecksum(final List<String> toChecksum) { 
    final List<String> checksums = new ArrayList<>(); 
    for (String s : toChecksum) { 
     checksums.add(calculateCheckSum(s)); 
    } 
    return Response.ok(checksums).build(); 
} 



private String calculateCheckSum(final String file) { 
    // do your checksum 
} 
+0

URL url =新的URL(binpath); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); String mt = connection.getContentType(); ResponseBuilder response = Response.ok((Object)is,mt); (「Content-Disposition」,「attachment; filename =」+ binpath.substring(binpath.lastIndexOf('/')+ 1,binpath.length())); return response.build();這是什麼返回file1Response需要被提取到一個字符串。 – Newbie

+0

我完全誤讀了這個問題。你不能將二進制文件作爲json返回,這是不可能的。如果您嘗試在單個請求中返回兩個文件的二進制文件,就我所見,這也是不可能的。即使您可以將該文件顯示爲一個文件並且似乎已損壞。如果您需要下載多個文件,您需要在發送單個存檔文件之前將它們存檔到服務器端的單個zip,tar,rar等文件中。在你的情況下,它看起來像是拉鍊拉鍊。 –

+0

該文件僅包含文本內容。是否有可能讀取java中的內容。或者有沒有一種方法可以使用ResponseBuilder從文件中更改對String的響應。 – Newbie