无法在Jersey中实现简单的文件上传-“以资源的POST注释,该类未被识别为有效的资源方法.不可用" [英] Cannot implement simple file upload in Jersey - "annotated with POST of resource, class is not recognized as valid resource method. unavailable"

查看:185
本文介绍了无法在Jersey中实现简单的文件上传-“以资源的POST注释,该类未被识别为有效的资源方法.不可用"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无法使用Jersey实现简单的文件上传.缺少在应用程序引导时引发的依赖项错误:

Unable to implement simple file upload using Jersey. Missing dependency errors raised at application bootstrap:

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.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0
  SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1
  SEVERE: Method, public javax.ws.rs.core.Response com.foo.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.foo.FS2Resource, is not recognized as valid resource method.
unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)

将输入参数映射到REST服务似乎存在问题?我已经阅读了文档并遵循了几个示例,但是我并没有偏离这些示例.

It seems like there is an issue with mapping the input parameters to a REST service? I have read documentation and followed several examples, and I am not deviating from those examples.

代码如下:

@Path("v1/")
public class FileUploadResource {


    @POST
    @Path("upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces({MediaType.APPLICATION_JSON})
    public Response uploadFile(
        @FormDataParam("file") InputStream is,
        @FormDataParam("file") FormDataContentDisposition detail) {

        String name = detail.getFileName();

        // do upload stuff
        String output = .... 

        return Response.status(200).entity(output).build();
    }

}

我为FormDataParams输入了"compile'c​​om.sun.jersey.contribs:jersey-multipart:1.17.1'".

I pulled in "compile 'com.sun.jersey.contribs:jersey-multipart:1.17.1'" for the FormDataParams.

编辑:我能够在Jersey上运行它,但只能以这种更原始的方式进行:

EDIT: I was able to get it working in Jersey but only in this more primitive fashion:

 @POST
 @Path("upload")
 @Consumes(MediaType.MULTIPART_FORM_DATA)     
 @Produces(MediaType.TEXT_PLAIN)

 public Response uploadFile(final MimeMultipart file) {
   if (file == null) {
     return Response.status(Response.Status.BAD_REQUEST).entity("Must supply a valid file").build();

   try {
     for (int i = 0; i < file.getCount(); i++) {
       // ... do something with file.getBodyPart(i));
     }
     return Response.ok("done").build();
   } catch (final Exception e) {
     return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build();
   }
 }

这可能是一个足够的解决方法,但仍想深入了解问题.

This is probably a sufficient workaround, but would still like to get to the bottom of the issue.

推荐答案

我遇到了同样的问题.

这是一个版本问题(我在jersey.multipart中是1.8,在其余的球衣中是1.17.1).将它们全部设置为1.17.1 workrd for mee.

It was a version problem (I'd 1.8 in jersey.multipart and 1.17.1 in the rest of jersey). Setting all of them to 1.17.1 workrd for mee.

从这里获取我的答案:

缺少方法依赖项的情况做文件上传休息Web服务

这篇关于无法在Jersey中实现简单的文件上传-“以资源的POST注释,该类未被识别为有效的资源方法.不可用"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆