Maison >Java >javaDidacticiel >Comment télécharger des fichiers avec des données d'entité intégrées dans un service Web Jersey RESTful ?
Problème :
La tâche consiste à créer un employé enregistrer tout en téléchargeant une image correspondante dans un seul appel REST. L'objectif est d'atteindre cette fonctionnalité de manière transparente et efficace.
Solution :
Afin d'atteindre cet objectif, il est important de comprendre qu'avoir plusieurs contenus -Les types dans la même requête ne sont pas pris en charge. Au lieu de cela, les données des employés doivent être incluses dans le cadre de la requête multipart.
L'extrait de code suivant illustre comment y parvenir :
@POST @Path("/upload2") @Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response uploadFileWithData( @FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition contentDispositionHeader, @FormDataParam("emp") Employee emp) { // Business logic }
Ici, le @FormDataParam("emp") l'annotation aide à extraire les données des employés de la demande en plusieurs parties. De plus, la classe Employee doit être définie avec les méthodes getter et setter appropriées.
Test multipart :
Pour tester la fonctionnalité multipart, la classe MultiPartFeature peut être enregistrée auprès du Client Jersey utilisant Register (MultiPartFeature.class). Par exemple, l'extrait de test suivant peut être utilisé :
@Test public void testGetIt() throws Exception { final Client client = ClientBuilder.newBuilder() .register(MultiPartFeature.class) .build(); WebTarget t = client.target(Main.BASE_URI).path("multipart").path("upload2"); FileDataBodyPart filePart = new FileDataBodyPart("file", new File("stackoverflow.png")); String empPartJson = "{ ... employee data as JSON ... }"; MultiPart multipartEntity = new FormDataMultiPart() .field("emp", empPartJson, MediaType.APPLICATION_JSON_TYPE) .bodyPart(filePart); Response response = t.request().post( Entity.entity(multipartEntity, multipartEntity.getMediaType())); System.out.println(response.getStatus()); System.out.println(response.readEntity(String.class)); response.close(); }
Ce test crée une requête en plusieurs parties qui inclut à la fois l'image et les données de l'employé.
Considérations :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!