我有一个com.sun.jersey.spi.inject.Errors

时间:2014-08-29 10:17:25

标签: java rest jersey

我写了一个按照这样的方式上传文件的方法:

@POST
@Path("file")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_HTML)
public String uploadFile(
        @FormDataParam("file") InputStream in,
        @FormDataParam("file") FormDataContentDisposition fileDisposition,
        @FormDataParam("fileName") String fileName){
    String fullName = fileDisposition.getFileName();
    try {
        OutputStream os = new FileOutputStream(
                new File("D://",
                fileName + fullName.substring(fullName.indexOf('.'))));
        int index = 0;
        byte[] buffer = new byte[256];
        while( (index = in.read(buffer)) != -1){
            os.write(buffer , 0 , index);
        }
        in.close();
        os.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }       
    return fullName;
}

如您所见,它非常简单。但是当我将它部署到Tomcat时,我收到了一个错误:

  严重: The following errors and warnings have been detected with resource and/or provider classes:
  SEVERE: Missing dependency for method public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String) at parameter at index 0
  SEVERE: Missing dependency for method public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String) at parameter at index 1
  SEVERE: Missing dependency for method public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String) at parameter at index 2
  SEVERE: Method, public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String), annotated with POST of resource, class rest.upload.Upload, is not recognized as valid resource method.
八月 29, 2014 6:01:30 下午 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException

八月 29, 2014 6:01:30 下午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /upload threw load() exception
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)

好的,我能做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:1)

正如我后面所知,注释@FormDataParam使用了名为jersey_multipart.jar的jar,其路径是 com.sun.jersey.multipart.FormDataParam。

更重要的是,它与@ POST / @ PathParam等其他注释不同,其路径为javax.ws.rs。*;

问题在于,当我将jersey_multipart.jar添加到项目中时,它的版本是1.18,而jersey-core.jar是版本1.14。所以它们之间存在冲突。

所以我让这些罐子版本一样,问题本身就解决了。

答案 1 :(得分:0)

确保在您的运行时类路径中添加了 1)jersey-multipart-1.17.1.jar 2)mimepull-1.6.jar

除此之外,你应该拥有与jersey-core或jersey-bundle相同的版本。