2017-10-17 14 views
0

J'ai écrit un petit contrôleur de printemps qui accepte un fichier multipart comme paramètreImpossible de télécharger un fichier au service Spring REST via RestTemplate

@PutMapping("/fileUpload") 
    public String test(@RequestParam("test") MultipartFile file) { 
     System.out.println("In controller"); 
     return file.getOriginalFilename(); 
    } 

Le RestTemplate correspondant que j'utilise est

Path path = Paths.get("C:\\Users\\Foo\\Desktop", "baz.txt"); 

      FormHttpMessageConverter messageConverter = new FormHttpMessageConverter(); 
      messageConverter.addPartConverter(new ByteArrayHttpMessageConverter()); 

      RestTemplate client = new RestTemplate(); 
      client.getMessageConverters().add(messageConverter); 

      String end_url = "http://localhost:8888/test/fileUpload"; 

      HttpHeaders headers = new HttpHeaders(); 
      headers.setContentType(MediaType.MULTIPART_FORM_DATA); 

      MultiValueMap<String, Object> body = new LinkedMultiValueMap<String, Object>(); 

      body.add("test", new ByteArrayResource(Files.readAllBytes(path))); 

      HttpEntity<MultiValueMap<String, Object>> entity 
       = new HttpEntity<MultiValueMap<String, Object>>(body, headers); 

      client.exchange(end_url, HttpMethod.PUT, entity, String.class, new HashMap()); 
le

l'erreur persiste suivante, peu importe ce que je tente:

Caused by: org.springframework.web.client.HttpClientErrorException: 400 null 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) ~[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] 
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700) ~[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653) ~[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:621) ~[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:540) ~[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] 
    at org.controller.Runner.run(Runner.java:57) [classes/:na] 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:776) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE] 
    ... 6 common frames omitted 

Qu'est-ce que je fais faux ? J'ai essayé d'ajouter tous les convertisseurs de messages typiques comme ByteArrayHttpMessageConverter, ResourceHttpMessageConverter, et j'ai aussi essayé en utilisant le commons-fileupload

Quelqu'un peut-il me dire ce que je fais mal dans mon RestTemplate?

+0

Vous pouvez obtenir une meilleure information regardant console du serveur. Je pense que '@ RequestPart' est plus approprié ici à la place de' @ RequestParam' puisqu'il s'agit d'un fichier. – Vasan

+0

@Vasan Ne fonctionne pas avec '@ RequestParam' –

Répondre

0

Comment ça va? Essayez de modifier votre

@PutMapping("/fileUpload") 

à

@PutMapping(value = "/fileUpload", consumes = "multipart/form-data") 
+1

Cela fonctionnait sans –