Jersey使用中遇到的问题

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

  1. 报错信息:The ResourceConfig instance does not contain any root resource classes
    这里写图片描述
    原因:web.xml配置有问题,下图红框中要配置服务端的包路径
    这里写图片描述

  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;  
     }

可能会出现如下错误:
这里写图片描述

解决方案:
(1)在application注册MultiPartFeature类
这里写图片描述
(2) 在web.xml文件中添加如下代码

<servlet> 
    <servlet-name>Jersey-Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.css.sword.restful</param-value> 
    </init-param> 
    <init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>

替换了2.23的包出现了如下的错误:
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.server.internal.inject.AbstractHttpContextValueFactory
这里写图片描述
这里写图片描述
这个问题折腾了我好几天,最后找到主要的问题在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,问题解决

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值