Jersey使用中遇到的问题

来源:互联网 发布:液晶电视机编程器 编辑:程序博客网 时间:2024/05/21 06:20

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,问题解决

0 0
原创粉丝点击