Jersey REST WS错误:"缺少方法的依赖...在索引X处的参数"

Ric*_*ckB 9 java rest jersey media-type

我收到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

我有一个以前工作的POST方法,它接受Multipart数据(文件上传),然后从提交的表单中获取一些其他字符串数据字段,这里是代码:

@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();
}
Run Code Online (Sandbox Code Playgroud)

该错误似乎与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();
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ckB 12

谷歌搜索后,我最终审查了一些有趣的案例,如@FormParam失败的解组问题,或者丢失多重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) {
    ....
Run Code Online (Sandbox Code Playgroud)

如果接收的数据类型不必处理MIME编码,则@FormParam注释将尝试通过序列化处理内容; 相反,@FormDataParam注释需要在@Consumes注释具有时配置的一些特定处理MediaType.MULTIPART_FORM_DATA.希望这可以帮助.