問題:
單一任務是建立一個員工在單一工作REST 呼叫中上傳對應影像時進行記錄。目標是以無縫且高效的方式實現此功能。
解決方案:
為了實現此目標,重要的是要了解擁有多個內容- 不支援同一請求中的類型。相反,員工資料應作為多部分請求的一部分包含在內。
以下程式碼片段說明如何實現此目的:
@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 }
此處,@FormDataParam("emp")註解有助於從多部分請求中提取員工資料。此外,應使用適當的 getter 和 setter 方法定義 Employee 類別。
多部分測試:
要測試多部分功能,可以使用 MultiPartFeature 類別進行註冊Jersey 用戶端使用 register(MultiPartFeature.class)。例如,可以使用以下測試片段:
@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(); }
此測試建立一個包含影像和員工資料的多部分請求。
注意事項:
以上是如何在 Jersey RESTful Web 服務中上傳帶有嵌入實體資料的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!