我收到以下错误:
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();
}
该错误似乎与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();
}
答案 0 :(得分:11)
点击谷歌后,我最终审核了一些有趣的案例,例如Failed unmarshalling issue with @FormParam或Missing mulipart JAR dependency issue,我问题的最近似的帖子就是:"Missing dependecy for method",我回答的是链接到这个POST,因为我看不到那个特定的解决方案。
该问题似乎与@FormDataParam
注释有关,当与方法级@Consumes
注释一起使用时,值为MediaType.APPLICATION_FORM_URLENCODED
。
当我更改Method签名以使用@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
时配置的某些特定处理。希望这会有所帮助。
答案 1 :(得分:3)
我的项目遇到了同样的错误。
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) {...}
答案 2 :(得分:0)
供参考:在我的情况下,这是依赖性jersey-multipart
,它与其他Jersey库使用的版本不同,导致与多部分表单数据有关的此错误。 ->确保所有Jersey库都使用相同的版本号! (mvn dependency:tree
是你的朋友)