首頁 >Java >java教程 >如何在 Jersey RESTful Web 服務中上傳帶有嵌入實體資料的檔案?

如何在 Jersey RESTful Web 服務中上傳帶有嵌入實體資料的檔案?

Patricia Arquette
Patricia Arquette原創
2024-12-05 14:10:14837瀏覽

How to Upload Files with Embedded Entity Data in a Jersey RESTful Web Service?

在Jersey RESTful Web 服務中使用實體資料上傳檔案

問題:

單一任務是建立一個員工在單一工作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();
}

此測試建立一個包含影像和員工資料的多部分請求。

注意事項:

  • 某些客戶端(例如 Postman)可能不允許設定單獨的正文部分內容類型。但是,您可以在反序列化資料之前使用 jsonPart.setMediaType(MediaType.APPLICATION_JSON_TYPE); 明確設定 Content-Type。
  • 或者,您可以使用 String 參數並使用 JSON 函式庫手動反序列化 JSON 資料.

以上是如何在 Jersey RESTful Web 服務中上傳帶有嵌入實體資料的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn