2013-04-09 9 views
7

ja otrzymuję następujący błąd:Jersey REST WS Błąd: „brakujących zależnościach dla metody ... w parametrze w indeksie 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. 

Mam poprzednio pracujący metody POST, która pobiera dane wieloczęściowe (a Prześlij plik), a następnie kilka innych pól danych String od złożonej postaci, oto kod:

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

błąd wydaje się być związane ze sposobem parametry forma są interpretowane przez Jersey. Oto kod, który nie:

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

Odpowiedz

11

Po googling trochę skończę przegląd ciekawych przypadkach, takich jak Failed unmarshalling issue with @FormParam lub Missing mulipart JAR dependency issue najbardziej aproximate post na moim problemem było to: "Missing dependecy for method", którą odebrać z linkiem do to POST, ponieważ nie widzę żadnego aktualnego rozwiązania dla tego konkretnego.

Problem wydaje się być związane z @FormDataParam adnotacji, w przypadku korzystania z metody poziomu @Consumes adnotacji o wartości MediaType.APPLICATION_FORM_URLENCODED.

Po zmianie podpisu metody na przypisanie każdego pola z tekstem prostym numerem @FormParam, wyjątek zniknął. Sprawdź stałą poniższy kod:

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

Jeśli typ danych odbieranych nie mają do czynienia z kodowania MIME The @FormParam adnotacja będzie próbował uporać się z treścią za pomocą serializacji; Natomiast adnotacja @FormDataParam wymaga pewnej specyficznej obsługi, która jest skonfigurowana, gdy adnotacja @Consumes ma wartość . Mam nadzieję że to pomoże.

3

Miałem ten sam błąd w moim projekcie.

1) musisz umieścić wszystkie zależności jersey w tej samej wersji.

2) Miałem też problem ze względu anotations Swagger @ApiParam:

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

ich usunięcie nie trick:

@FormDataParam("file") InputStream inputStreamCsv 

tu jest link mentionning problem: https://github.com/swagger-api/swagger-core/issues/1530

Wreszcie, wszystko działało z tym:

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

Usunięcie adnotacji typu "swagger" pomogło mi. Dzięki. –