Джерси REST WS Ошибка: отсутствует зависимость для метода в параметре по индексу 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.

У меня есть ранее работающий метод POST, который принимает данные Multipart (загрузка файла), а затем некоторые другие поля данных String из отправленной формы, вот код:

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

person RickB    schedule 09.04.2013    source источник


Ответы (3)


Немного погуглив, я закончил обзор некоторых интересных случаев, таких как Ошибка десортировки с @FormParam или Отсутствует проблема с зависимостями Mulipart JAR наиболее приблизительным сообщением для моей проблемы было следующее: "Отсутствует зависимость для метода ", на который я отвечаю ссылкой на этот POST, так как не вижу текущего решения для этого конкретного.

Проблема оказалась связанной с аннотацией @FormDataParam при использовании с аннотацией @Consumes уровня метода со значением 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. Надеюсь это поможет.

person RickB    schedule 09.04.2013

У меня была такая же ошибка в моем проекте.

1) вам нужно поместить все зависимости трикотажа в одну и ту же версию.

2) У меня также была проблема из-за чванливых аннотаций @ApiParam:

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

Их удаление помогло:

@FormDataParam("file") InputStream inputStreamCsv

вот ссылка с упоминанием проблемы: 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) {...}
person Alexandre Hamon    schedule 16.06.2017

Для справки: в моем случае это была зависимость jersey-multipart, используемая в другой версии, чем другие библиотеки Джерси, вызывающая эту ошибку в связи с данными составной формы. --> обязательно используйте один и тот же номер версии для всех библиотек Джерси! (mvn dependency:tree твой друг)

person winne2    schedule 23.08.2019