Senden byte-array und String erhalten durch REST web service

in meinem Frühlings-Rest-web-Dienst versende ich eine Datei (auch große Größen) als byte-array, aber wenn ich die Informationen erhalten, das Objekt ist eine Zeichenkette, also wenn ich den cast von Object, byte[] ich erhalte die folgende Fehlermeldung:

java.lang.Classcastexception-Fehler: java.lang.String nicht umgewandelt werden, [B

Dem originl-Datei konvertiert wird durch

Files.readAllBytes(Paths.get(path))

und diese byte[] gefüllt ist, in einem Objekt mit einem Feld result des Objekttyps.
Wenn der Client abrufen dieses Objekt und es wird result Klasse mit cast zu byte[] es erscheint der oben genannten Ausnahme, das ist der client-code

Files.write(Paths.get("test.txt"),((byte[])response.getResult()));

Wenn ich einen cast auf string und dann zu Byte den Inhalt der Datei unterscheidet sich von der ursprünglichen Datei. Ich interessiere mich nicht, die Datei-Typ, Datei-Inhalt, ich habe nur das kopieren vom server zum client-Verzeichnis
Wie kann ich das machen?Dank

server-Klasse:

@Override
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public @ResponseBody Response getAcquisition(@RequestParam(value="path", defaultValue="/home") String path){
        try {
            byte[] file = matlabClientServices.getFile(path);
            if (file!=null){
                FileTransfer fileTransfer= new FileTransfer(file, Paths.get(path).getFileName().toString());
                return new Response(true, true, fileTransfer, null);
            }
            else 
                return new Response(false, false, "File doesn't exist!", null);         
        } catch (Exception e) {
            ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e);
            LOG.error("Threw exception in MatlabClientControllerImpl::getAcquisition :" + errorResponse.getStacktrace());
            return new Response(false, false, "Error during file retrieving!", errorResponse);
        }       
    }

- und Bildübertragung ist:

    public class FileTransfer {

        private byte[] content;
        private String name;
..get and set

client-Klasse:

    @RequestMapping(value = "/", method = RequestMethod.GET)
public @ResponseBody Response getFile(@RequestParam(value="path", defaultValue="/home") String path){
    RestTemplate restTemplate = new RestTemplate();
    Response response = restTemplate.getForObject("http://localhost:8086/ATS/client/file/?path={path}", Response.class, path);
    if (response.isStatus() && response.isSuccess()){
        try {
            @SuppressWarnings("unchecked")
            LinkedHashMap<String,String> result= (LinkedHashMap<String,String>)response.getResult();
            //byte[] parseBase64Binary = DatatypeConverter.parseBase64Binary((String)fileTransfer.getContent());
            Files.write(Paths.get(result.get("name")), DatatypeConverter.parseBase64Binary(result.get("content"))); 
            return new Response(true, true, "Your file has been written!", null);
            } catch (IOException e) {
            return new Response(true, true, "Error writing your file!!", null);
        }
    }
    return response;
}
  • Können Sie zeigen, wie Sie definiert die rest-Endpunkt und so? Welchen content-Typ es akzeptieren? wenn es json, dann byte[] würde gesendet werden als Base64-codierte Zeichenfolge. Angesichts der Recht mapper können Sie diese als byte[].
  • ja, ich bin mit json. Ich aktualisierte den code oben
  • Wie sieht Ihr Response Klasse Aussehen? Es sollte nicht enthalten Object es sollte ein byte[] Feld.
  • es enthält Objekt, weil die Antwort für alle web-service
  • Ich würde in Erwägung ziehen, die Antwort Klasse, wenn Sie nicht eigentlich die gleiche Antwort die ganze Zeit. "Q2lhbyBNb25kbw==" ist sonst nur ein string für den deserializer. Wenn Sie sagen, es zu Deserialisieren z.B. ein BinaryResponse Klasse, die eine byte[] Feld würde es tun, die Datentyp-Konvertierung Sachen für Sie. Response<GenericType> (nicht sicher, ob das funktioniert thouhg) oder sub-Klassen
InformationsquelleAutor luca | 2015-11-24
Schreibe einen Kommentar