2013-04-09 15 views
7

私は次のようなエラーになっています「インデックスXにパラメータでの方法...の依存関係がありません」:私はマルチパートデータを取る前に作業POSTメソッドを持っているジャージーREST WSエラー:

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. 

を(Aファイルのアップロード)と、送信されたフォームから、その後いくつかの他の文字列データフィールドは、ここでのコードは次のとおりです。

@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(); 
} 

エラーは、フォームパラメータはジャージーによって解釈されている方法に関係しているようです。ここで失敗したコードは次のとおりです。

@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(); 
} 

答えて

11

少しグーグルた後、私は私の問題のための最もaproximateポストはこのだったMissing mulipart JAR dependency issueなどFailed unmarshalling issue with @FormParamなど、いくつかの興味深い例を、見直してしまう、あるいは:"Missing dependecy for method"、私はへのリンクを答えています私はその特定のものの現在の解決策を見ていないので、このPOST。

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

平文フィールドのそれぞれに@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の場合に設定されるいくつかの特定の処理を必要とします。お役に立てれば。

3

私のプロジェクトでは同じエラーが発生しました。

1)すべてのジャージー依存関係を同じバージョンにする必要があります。

2)私は@ApiParamため闊歩するanotationsのも問題を抱えていた:

@ApiParam(value = "import file", required = true) @FormDataParam("file") InputStream inputStreamCsv 

それらを削除するにはトリックをした:ここ

@FormDataParam("file") InputStream inputStreamCsv 

は、問題をmentionningリンクです:https://github.com/swagger-api/swagger-core/issues/1530

最後に、すべてがこれと一緒に働いた:

@POST 
@Path("/import") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response import(
     @FormDataParam("file") InputStream inputStreamCsv, 
     @FormDataParam("file") FormDataContentDisposition detailsFichier) {...} 
+0

スワッガーアノテーションを削除することは私にとっては魅力的でした。ありがとう。 –

関連する問題