2013-04-09 7 views
7

ich die folgende Fehlermeldung erhalten:Jersey REST WS Fehler: "Fehlende Abhängigkeit für Verfahren ... bei Parameter bei Index X"

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. 

Ich habe eine vorher Arbeits POST-Methode, die ein mehrteiliger Daten nimmt (a Datei-Upload) und dann einige andere String-Datenfelder aus dem eingereichten Formular, hier ist der Code:

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

der Fehler scheint sich auf die Art und Weise werden die Form bezogen werden Parameter von Jersey interpretiert werden. hier ist der Code, der fehlschlägt:

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

Antwort

11

Nach ein wenig googeln ich Überprüfung am Ende einige interessante Fälle, wie Failed unmarshalling issue with @FormParam oder Missing mulipart JAR dependency issue die Ungefähres Beitrag für mein Problem war: "Missing dependecy for method", die ich mit einem Link beantworten Dieser POST, wie ich sehe keine aktuelle Lösung für diesen bestimmten.

Das Problem schien mit der @FormDataParam Annotation verwandt zu sein, wenn es mit der Methodenebene @Consumes Annotation mit dem Wert MediaType.APPLICATION_FORM_URLENCODED verwendet wurde.

Wenn ich die Methodensignatur geändert habe, um jedes Klartextfeld mit @FormParam zu kommentieren, war die Ausnahme weg. Überprüfen Sie den festen Code unten:

@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) { 
    .... 

Wenn der Typ der empfangenen Daten werden nicht mit MIME-Kodierungen zu tun haben, die @FormParam Annotation versuchen wird, mit dem Inhalt über die Serialisierung zu befassen; Im Gegensatz dazu erfordert die Annotation @FormDataParam eine spezifische Behandlung, die konfiguriert wird, wenn die @Consumes Annotation die MediaType.MULTIPART_FORM_DATA hat. Hoffe das hilft.

3

Ich hatte den gleichen Fehler bei meinem Projekt.

1) Sie müssen alle Jersey Abhängigkeiten auf die gleiche Version setzen.

2) Ich hatte auch Probleme wegen Prahlerei anotations @ApiParam:

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

sie haben Entfernen der Trick:

@FormDataParam("file") InputStream inputStreamCsv 

hier ist der Link mentionning das Problem: https://github.com/swagger-api/swagger-core/issues/1530

Schließlich hat damit alles funktioniert:

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

Entfernen von Swagger Annotationen hat den Trick für mich getan. Vielen Dank. –