9

次のエラーが表示されます。

Apr 09, 2013 12:24:26 PM com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 0
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 1
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 2
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String) at parameter at index 3
SEVERE: Method, public javax.ws.rs.core.Response com.package.ImportService.specifyLocalFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String), annotated with POST of resource, class com.package.ImportService, is not recognized as valid resource method.

マルチパート データ (ファイルのアップロード) を取得し、送信されたフォームから他の文字列データ フィールドを取得する、以前は機能していた POST メソッドがあります。コードは次のとおりです。

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream,
    @FormDataParam("file") FormDataContentDisposition fileDetail,
    @FormDataParam("param1") String param1,
    @FormDataParam("param2") String param2,
    @FormDataParam("param3") String param3) {
    ....
    ....
    return Response.status(200).entity(getEntity()).build();
}

このエラーは、Jersey がフォーム パラメータを解釈する方法に関連しているようです。失敗するコードは次のとおりです。

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/local")
public Response specifyLocalFile(
    @FormDataParam("file") String fullFilePath,
    @FormDataParam("param1") String param1,
    @FormDataParam("param2") String param2,
    @FormDataParam("param3") String param3) {
    ....
    ....
    return Response.status(200).entity(getEntity()).build();
}
4

3 に答える 3

13

少しグーグルで調べた後、 @FormParam でのアンマーシャリングの問題の失敗、またはマルチパート JAR 依存関係の問題の欠落など、いくつかの興味深いケース確認することになりました。その特定のものに対する現在の解決策は見当たらないので、この投稿に。

@FormDataParamこの問題は、メソッド レベルの@Consumesアノテーションで value を使用すると、アノテーションに関連しているように見えましたMediaType.APPLICATION_FORM_URLENCODED

メソッド署名を変更して、各プレーンテキスト フィールドに で注釈を付け@FormParamたところ、例外はなくなりました。以下の修正コードを確認してください。

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/local")
public Response specifyLocalFile()
    @FormParam("file") String fullFilePath,
    @FormParam("param1") String param1,
    @FormParam("param2") String param2,
    @FormParam("param3") String param3) {
    ....

受信するデータのタイプが MIME エンコーディングを処理する必要がない場合、@FormParam注釈はシリアライゼーションを介してコンテンツを処理しようとします。対照的に、@FormDataParam注釈は、@Consumes注釈にMediaType.MULTIPART_FORM_DATA. お役に立てれば。

于 2013-04-09T18:41:07.030 に答える