使用Jersey 2.22.1开发Rest服务遇类初始化异常求助
解决Jersey 2.22.1中
Could not initialize class org.glassfish.jersey.message.internal.ReaderWriter异常 嘿,我来帮你搞定这个头疼的异常!这个问题大概率是依赖不完整或者版本冲突搞的鬼,结合你给出的配置,咱们一步步来排查:
1. 先补全Jersey核心依赖
你只贴了javax.ws.rs-api的配置,但Jersey 2.x要跑起来,得有完整的核心包才行。赶紧把这些依赖加到你的pom.xml里,注意版本要统一用2.22.1:
<!-- Jersey核心服务器组件 --> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.22.1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> <version>2.22.1</version> </dependency> <!-- 如果你的接口要处理JSON数据,别忘了加这个JSON依赖 --> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.22.1</version> </dependency>
2. 排查依赖冲突
你把javax.ws.rs-api设成了<scope>provided</scope>,意思是让服务器容器提供这个API包,但如果容器自带的版本和Jersey 2.22.1不兼容(比如容器用的是老版JAX-RS 1.x),就会触发这个异常:
- 如果是Tomcat这类默认不提供JAX-RS API的容器,建议把
provided改成compile,让项目自己管理这个依赖。 - 用
mvn dependency:tree命令生成依赖树,看看有没有其他依赖偷偷引入了不同版本的JAX-RS或者Jersey包。要是发现有旧版Jersey 1.x的依赖,直接排除掉就行,比如:
<dependency> <groupId>你的其他依赖groupId</groupId> <artifactId>你的其他依赖artifactId</artifactId> <version>对应版本</version> <exclusions> <exclusion> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> </exclusion> </exclusions> </dependency>
3. 检查类加载和部署问题
如果是Web应用,确认你的Jersey依赖包都在WEB-INF/lib目录里,别让服务器自带的类加载器优先加载了不兼容的类。有些服务器自带了JAX-RS相关库,要是冲突的话,得在服务器配置里禁用这些自带库,强制用项目里的依赖。
4. 验证Jersey配置类
最后检查下你的Jersey配置类是不是写对了,比如继承ResourceConfig的类要正确扫描你的接口包:
import org.glassfish.jersey.server.ResourceConfig; public class JerseyConfig extends ResourceConfig { public JerseyConfig() { // 替换成你的Rest接口所在的包路径 packages("com.yourcompany.rest"); // 有自定义特性的话也在这里注册 } }
按照上面的步骤走一遍,应该就能解决这个类初始化的问题啦~
内容的提问来源于stack exchange,提问作者Jyothsna
相关产品推荐
相关产品推荐

