問題:
タスクは従業員を作成することです単一の 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(); }
このテストは、画像と従業員データの両方を含むマルチパート リクエストを作成します。
考慮事項:
以上がJersey RESTful Webサービスにエンティティデータが埋め込まれたファイルをアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。