2016-07-26 15 views
1

Ich habe die, unter dem Herunterladen einer Datei mit dem Inhalt c50c4a23307529b59797525c52b2c50c * file1.zipMehrfachantworten in einer Antwort Kombinieren

Jetzt möchte ich file1Response und file2Response & Rückkehr als json kombinieren. Irgendwelche Hilfe, wie es geht?

@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; 


    } 

versucht eine Arraylist hinzuzufügen, wie folgt:

com.sun.jersey.api.MessageException
@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(); 


     } 

kehrt den Fehler: einen Nachrichtenkörper Schreiber für Java-Klasse java.util.ArrayList und Java Geben Sie die Klasse java.util.ArrayList ein, und der MIME-Medientyp application/json wurde nicht gefunden.

file1Response kommt von unten, kann unten alles geändert werden, um eine Zeichenfolge zurückzugeben.

  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

Ich nehme an, Antwort ist das Objekt javax.ws.rs.core.Response. Zuerst wird dies nicht funktionieren, da es eine Schnittstelle ist und Sie @JsonTypeInfo hinzufügen müssen, um dem Serializer mitzuteilen, wie er serialisiert werden soll. Sie müssen Ihre ArrayList in ArrayList konvertieren und den tatsächlichen String-Wert anstelle des Response-Objekts eingeben. –

+0

Ich versuchte file1Response.getEntity(). ToString(), aber dies liefert [email protected] und nicht den eigentlichen Inhalt. Wie bekomme ich den String von Response? – Newbie

Antwort

0

Versuchen:

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

return response.toString(); 

Kein Schaden, wenn es nicht funktioniert, nur versucht zu helfen. Aber wenn es Daumen hoch macht.

+0

Hat nicht funktioniert und gibt den Inhalt von file1Response nicht zurück. – Newbie

0

Ich würde empfehlen, Sie erstellen eine andere Methode, die tatsächlich die Zeichenfolge Prüfsumme zurückgibt und dann haben Sie Ihre Ressourcen-Methode aufrufen, dass.

@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 = neue URL (binpath); URLConnection Verbindung = url.openConnection(); InputStream ist = connection.getInputStream(); Zeichenfolge mt = connection.getContentType(); ResponseBuilder Antwort = Response.ok ((Objekt) ist, mt); response.header ("Content-Disposition", "Anhang; Dateiname =" + binpathString (binpath.lastIndexOf ('/' + 1, binpath.length())); Rückgabe response.build(); Dies gibt file1Response zurück, das in eine Zeichenfolge abgerufen werden muss. – Newbie

+0

Ich habe die Frage völlig falsch gelesen. Sie können keine Binärdatei als JSON zurückgeben, dies ist nicht möglich. Wenn Sie versuchen, zwei Dateien mit Binärdateien in einer einzigen Anfrage zurückzugeben, ist dies auch nicht möglich, soweit ich das sehen kann. Selbst wenn Sie könnten, würde die Datei als eine Datei erscheinen und würde scheinen beschädigt zu sein. Wenn Sie mehrere Dateien herunterladen müssen, müssen Sie diese vor dem Senden der einzelnen archivierten Dateien auf der Serverseite in einer einzigen zip, tar, rar usw. archivieren. In deinem Fall sieht es so aus, als wäre es ein Reißverschluss mit Reißverschlüssen. –

+0

Die Datei enthält nur Textinhalt. Ist es möglich, den Inhalt in Java zu lesen? Oder gibt es eine Möglichkeit, den ResponseBuilder zu verwenden, um die Antwort von der Datei auf String zu ändern. – Newbie

Verwandte Themen