Jersey 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();
}
该错误似乎与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();
}
问题答案:
经过一段时间的搜寻之后,我最终回顾了一些有趣的案例,例如@FormParam的失败编组问题或缺少mulipartJAR依赖问题,这是我遇到的最接近的帖子,它是:“对方法缺少依赖”,我通过链接回答到此POST,因为我看不到该特定解决方案的最新解决方案。
与带有value
@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
。希望这可以帮助。