2016-07-26 132 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