Envoyer tableau d'octets et de recevoir de la Chaîne par le biais de services web REST

dans mon Printemps de services web Rest-je envoyer un fichier (même de grande taille) en tant que tableau d'octets, mais lorsque je reçois l'information, l'objet est une Chaîne, donc quand je fais le casting de l'Objet de byte[] j'ai l'erreur suivante:

java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé à [B

La originl fichier est converti par

Files.readAllBytes(Paths.get(path))

et ce byte[] est rempli d'un objet avec un champ result de type d'Objet.
Lorsque le Client de récupérer cet objet, et elle devient de result classe avec des acteurs de byte[] il semble que l'exception ci-dessus, c'est le code du client

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

Si j'utilise une distribution à chaîne, puis d'octets le contenu du fichier est différent du fichier d'origine. Je n'aime pas le type de fichier, le contenu, je n'ai qu'à copier à partir du serveur vers le client répertoire
Comment puis-je faire?Grâce

de la classe de serveur:

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

et le transfert de fichiers est:

    public class FileTransfer {

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

classe client:

    @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;
}
  • Pouvez-vous montrer comment vous avez défini le point de terminaison rest ou tel? Ce type de contenu est-il accepter? si c'est du json, puis byte[] serait envoyé en tant que chaîne encodée en Base64. Le droit mappeur vous pouvez obtenir ce que byte[].
  • oui, je suis en utilisant json. J'ai mis à jour le code ci-dessus
  • Comment est-ce que votre Response classe ressembler? Il ne doit pas contenir Object il devrait être un byte[] champ.
  • il contient de l'objet car la Réponse est utilisé pour tous les web service
  • J'avais envisager de modifier la réponse de la classe, si vous n'avez pas réellement la même réponse à tous les temps. "Q2lhbyBNb25kbw==" est sinon juste une chaîne de caractères pour la deserializer. Si vous dites qu'il désérialiser par exemple, un BinaryResponse classe qui a un byte[] terrain, il ferait le type de données de conversion de choses pour vous. Response<GenericType> (pas sûr si cela fonctionne thouhg) ou des sous-classes
InformationsquelleAutor luca | 2015-11-24