0

ファイルをあるファイル形式から別のファイル形式に変換する Web サービスを実行しています。変換ロジックは既に機能していますが、今度は、Jersey を介してこのロジックをクエリしたいと考えています。ジャージー経由のファイルアップロードがチュートリアル/質問で扱われるときはいつでも、人々はマルチパートフォームデータを使用してこれを行う方法を説明します. ただし、単一のファイルを送信して返し、複数の部分を送信するオーバーヘッドをスキップしたいだけです。(Web サービスは、私が制御する別のマシンによってトリガーされるため、HTML フォームは含まれません。)

私の質問は、次のようなことをどのように達成するかです。

@POST
@Path("{sessionId"}
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@PathParam("sessionId") String sessionId, 
                    @WhatToPutHere InputStream uploadedFileStream) {
  return BusinessLogic.convert(uploadedFile); // returns StreamingOutput - works!
}

どうすれば を取得できuploadedFileStreamますか (それは何らかの注釈である必要がありますが、もちろんそうではないと思い@WhatToPutHereます)。経由でファイルを直接返す方法を見つけましたStreamingOutput

助けてくれてありがとう!

4

1 に答える 1

2

関数の 2 番目のパラメーターに何も入れる必要はありません。注釈を付けないでください。注意しなければならない唯一のことは、リソースに「名前を付ける」ことです。

リソースには次のような URI が必要です: someSite/someRESTEndPoint/myResourceId したがって、関数は次のようになります。

@POST
@Path("{myResourceId}")
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@PathParam("myResourceId") String myResourceId, 
                                               InputStream uploadedFileStream) {
    return BusinessLogic.convert(uploadedFileStream); 
}

何らかの種類の SessionID を使用する場合は、Header Param を使用することをお勧めします...次のようなものです。

@POST
@Path("{myResourceId}")
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@HeaderParam("sessionId") String sessionId,
                    @PathParam("myResourceId") String myResourceId, 
                                               InputStream uploadedFileStream) {
    return BusinessLogic.convert(uploadedFileStream); 
}
于 2013-08-06T09:10:36.503 に答える