ホームページ > Java > &#&チュートリアル > Jersey RESTful Webサービスにエンティティデータが埋め込まれたファイルをアップロードするにはどうすればよいですか?

Jersey RESTful Webサービスにエンティティデータが埋め込まれたファイルをアップロードするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-05 14:10:14
オリジナル
824 人が閲覧しました

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")アノテーションは、マルチパートリクエストから従業員データを抽出するのに役立ちます。さらに、Employee クラスは、適切なゲッター メソッドとセッター メソッドを使用して定義する必要があります。

マルチパート テスト:

マルチパート機能をテストするには、MultiPartFeature クラスをregister(MultiPartFeature.class) を使用する Jersey クライアント。たとえば、次のテスト スニペットを使用できます:

@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 などの一部のクライアントでは、個別の本文部分の Content-Type を設定できない場合があります。ただし、jsonPart.setMediaType(MediaType.APPLICATION_JSON_TYPE); を使用して、データを逆シリアル化する前に Content-Type を明示的に設定できます。
  • 代わりに、String パラメーターを使用し、JSON ライブラリを使用して JSON データを手動で逆シリアル化することもできます。 .

以上がJersey RESTful Webサービスにエンティティデータが埋め込まれたファイルをアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート