Jersey使用中遇到的问题

Jersey RESTful 框架是开源的RESTful框架, 实现了 JAX-RS 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。这里主要记录下在使用jersey开发中遇到的问题及解决方案,供大家参考。

  1. 报错信息:The ResourceConfig instance does not contain any root resource classes
    Jersey使用中遇到的问题_第1张图片
    原因:web.xml配置有问题,下图红框中要配置服务端的包路径
    Jersey使用中遇到的问题_第2张图片

  2. 上传文件
    Jersey上传文件需要jersey-multipart-1.19.1.jar这个包,有时也需要mimepull.jar这个包,例如下面这个例子:

     @POST  
     @Path("/upload")
     @Consumes(MediaType.MULTIPART_FORM_DATA)  
     public String fileUpload(@FormDataParam("file") InputStream fileInputStream,  
                @FormDataParam("file") FormDataContentDisposition disposition) throws IOException {
         String imageName = Calendar.getInstance().getTimeInMillis()  
                    + disposition.getFileName();  
             // System.out.println(name);
                File file = new File(ARTICLE_IMAGES_PATH + imageName);  
                //使用common io的文件写入操作
                try {
                       OutputStream os = new FileOutputStream(file);
                       int bytesRead = 0;
                       byte[] buffer = new byte[8192];
                       while ((bytesRead = fileInputStream.read(buffer, 0, 8192)) != -1) {
                        os.write(buffer, 0, bytesRead);
                       }
                       os.close();
                       fileInputStream.close();
                      } catch (Exception e) {
                       e.printStackTrace();
                      }
                //原来自己的文件写入操作  
                //saveFile(fileInputStream, file);    

                return "images/" + imageName;  
     }

可能会出现如下错误:
Jersey使用中遇到的问题_第3张图片

解决方案:
(1)在application注册MultiPartFeature类
Jersey使用中遇到的问题_第4张图片
(2) 在web.xml文件中添加如下代码

 
    Jersey-Service 
    org.glassfish.jersey.servlet.ServletContainer
     
      jersey.config.server.provider.packages 
      com.css.sword.restful 
     
    
    jersey.config.server.provider.classnames
    org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature

替换了2.23的包出现了如下的错误:
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.server.internal.inject.AbstractHttpContextValueFactory
Jersey使用中遇到的问题_第5张图片
Jersey使用中遇到的问题_第6张图片
这个问题折腾了我好几天,最后找到主要的问题在jersey-media-multipart-2.0.jar 这个包上。
这个包主要来辅助文件上传的,不引用这个包如果只是简单的表单及请求操作,程序可以正常启动,如果想做文件上传需引用这个包,问题就出现了,后来看这个包的源码发现它的确需要AbstractHttpContextValueFactory
而2.23版本中没有这个版本,经过几天的研究,找到问题jersey2.1以上都去掉了这个类,可能jersey-media-multipart-2.0.jar(此外还试了jersey-media-multipart-2.2.jar这个包,也是一样的问题)没有及时更新,将jersey版本换成2.0,问题解决

你可能感兴趣的:(Jersey使用中遇到的问题)