2013-04-11 1 views
2

J'ai essayé de comprendre comment utiliser RoboSpice avec Spring pour télécharger un fichier sur mon serveur, mais je ne trouve pas d'exemple qui fonctionne. De l'exemple que je ne trouve, je construisais:Téléchargement de fichiers RoboSpice avec Spring sur Android

class UploadJsonRequest extends SpringAndroidSpiceRequest<APIResponseUpload> { 

      public UploadJsonRequest() { 
       super(APIResponseUpload.class); 
      } 

      @Override 
      public APIResponseUpload loadDataFromNetwork() throws Exception { 

       MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>(); 
       for(org.calflora.observer.model.Attachment a : o.attachments){ 

        parts.add(a.name, new FileSystemResource(a.localPath)); 

       } 
       //parts.add("record", base); 
       return getRestTemplate().postForObject(URI, parts, APIResponseUpload.class); 
      } 
    } 
    return new UploadJsonRequest(); 

Cependant, cela me donne l'erreur:

Caused by: org.springframework.web.client.HttpClientErrorException: 404 err: org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/json;charset=UTF-8 

OK, cela semble indiquer que je dois faire quelque chose de plus pour indiquer les données doivent être transmises en utilisant multipart/form-data. Si c'est correct, comment cela est-il fait? Si ce n'est pas correct, quelle est l'approche canonique, puisque c'est clairement un besoin commun?

+0

Avez-vous voir ce code? http://stackoverflow.com/q/15769019/321354 – rciovati

+0

Oui. Vous remarquerez que ce code est presque le même que le mien. J'ai essayé de l'utiliser, mais il contient une référence à 'UploadRequestModel' qui n'est pas expliquée, et qui ne semble pas exister dans les fichiers jars que j'ai installés - donc évidemment, il ne serait pas construit. Pouvez-vous me donner un aperçu à ce sujet? – deepwinter

Répondre

4

Dans mon cas, ce qui suit a résolu ce problème

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(parts, requestHeaders); 

RestTemplate restTemplate = getRestTemplate(); 
restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); 
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

return restTemplate.postForObject(URI, requestEntity, APIResponseUpload.class); 

Toutefois, selon les documents pour le printemps, ce ne devrait pas avoir été nécessaire pour régler manuellement les convertisseurs de message.

Questions connexes