2016-12-13 2 views
4

Je @Controller avec la méthode avec la signature comme ceci:Comment envoyer une requête en plusieurs parties avec RestAssured?

@PostMapping 
@ResponseBody 
public ResponseEntity<Result> uploadFileAndReturnJson(@RequestParam("file") MultipartFile file) {} 

Je veux construire demande multipart sans créer physiquement un fichier. J'ai essayé de le faire comme ceci:

private MultiPartSpecification getMultiPart() { 
    return new MultiPartSpecBuilder("111,222") 
      .mimeType(MimeTypeUtils.MULTIPART_FORM_DATA.toString()) 
      .controlName("file") 
      .fileName("file") 
      .build(); 
} 

Response response = RestAssured.given(this.spec) 
      .auth().basic("admin", "admin") 
      .multiPart(getMultiPart()) 
      .when().post(URL); 

Malheureusement, je reçu une réponse:

« fichier » partie requête requise n'est pas

J'ai essayé de regarder les tests unitaires RestAssured et il semble Je le fais correctement. Si j'essaie de transmettre byte [] ou InputStream au lieu de String, une exception est levée:

Impossible de réessayer une demande avec une entité de requête non répétable.

Merci pour votre aide.

Répondre

3

Votre code a l'air bien et il devrait fonctionner avec byte []. Vous pouvez utiliser MultiPartSpecBuilder(byte[] content) comme ci-dessous.

private MultiPartSpecification getMultiPart() { 
     return new MultiPartSpecBuilder("Test-Content-In-File".getBytes()). 
       fileName("book.txt"). 
       controlName("file"). 
       mimeType("text/plain"). 
       build(); 
    } 

Les détails de l'erreur que vous obtenez avec octet [] est disponible à https://github.com/rest-assured/rest-assured/issues/507. Selon ce que vous devriez essayer avec l'authentification de base préemptive comme ci-dessous.

.auth().preemptive.basic("admin", "admin")