Heim >Java >javaLernprogramm >Wie lade ich Dateien mit eingebetteten Entitätsdaten in einen RESTful-Webdienst von Jersey hoch?
Problem:
Die Aufgabe besteht darin, einen Mitarbeiter anzulegen Aufzeichnen, während ein entsprechendes Bild in einem einzigen REST-Aufruf hochgeladen wird. Das Ziel besteht darin, diese Funktionalität auf nahtlose und effiziente Weise zu erreichen.
Lösung:
Um dieses Ziel zu erreichen, ist es wichtig zu verstehen, dass mehrere Inhalte vorhanden sind -Types in derselben Anfrage werden nicht unterstützt. Stattdessen sollten die Mitarbeiterdaten als Teil der mehrteiligen Anfrage einbezogen werden.
Der folgende Codeausschnitt veranschaulicht, wie dies erreicht wird:
@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 }
Hier ist das @FormDataParam("emp") Annotation hilft beim Extrahieren der Mitarbeiterdaten aus der mehrteiligen Anfrage. Darüber hinaus sollte die Employee-Klasse mit geeigneten Getter- und Setter-Methoden definiert werden.
Multipart-Testen:
Um die Multipart-Funktionalität zu testen, kann die MultiPartFeature-Klasse bei registriert werden Jersey-Client mit register(MultiPartFeature.class). Beispielsweise kann das folgende Test-Snippet verwendet werden:
@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(); }
Dieser Test erstellt eine mehrteilige Anfrage, die sowohl das Bild als auch die Mitarbeiterdaten enthält.
Überlegungen:
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mit eingebetteten Entitätsdaten in einen RESTful-Webdienst von Jersey hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!