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 的 Failed unmarshalling issueMissing mulipart JAR dependency issue最接近我的问题的帖子是:“Missing dependecy for method”,我用链接回答到这个帖子,因为我看不到那个特定的解决方案。

@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. 希望这可以帮助。

于 2013-04-09T18:41:07.030 回答
4

我的项目也有同样的错误。

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) {...}
于 2017-06-16T12:47:14.363 回答
0

供参考:在我的情况下,它是 depency jersey-multipart,用于与其他 Jersey 库不同的版本,导致与多部分表单数据相关的此错误。--> 确保对所有 Jersey 库使用相同的版本号!(mvn dependency:tree是你的朋友)

于 2019-08-23T12:34:05.587 回答