Jersey-Spring集成:java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;).. - Go语言中文社区

Jersey-Spring集成:java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)..


Jersey与Spring集成时报的错误:

java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;


项目新建采用如下方式,自动生成了一些文件和配置:


pom.xml中默认会导入如下依赖包:


web.xml中会有默认servlet配置如下:


按照此方式生成的项目,将spring集成进来,导入依赖包,如下:


运行放到tomcat中能正常启动,但是访问接口时抛出异常如上所述。

问题就出现在自动生成这部分配置中,因为引入了jersey-spring的jar,内部有jersey-server/core等依赖,出现UriBuilder冲突,刚开始不知道冲突原因,后来debug发现是自动生成那两个依赖container和media都有这个东西。

解决方案:

        1. 首先要将pom.xml中自动生成的这两个依赖去掉。

         2. 在web.xml中自动生成的servlet换掉,使用jersey-spring中的Springservlet,下面有截图。

publish - 重启项目,就正常了。由于默认生成的可能修改时候不太注意,所以容易漏掉所以手动创建后集成spring时一定要注意!


关于集成后接口返回Json格式数据的支持:

在SpringServlet或者其父类里面找相关的配置,可以在启动时初始化的web.xml参数init-param,其中com.sun.jersey.config.property.resourceConfigClass是resourceConfig类的配置,可以自己实现,默认使用DefaultResourceConfig类作为默认配置。当需要使用json数据时,需要注册Json处理类,这时要自定义config类继承自ResourceConfig或者DefaultResourceConfig都可以,然后在web.xml中配置如下:


实现类如下:添加一个json处理类(需要引入以来包jackson相关的)


根源上是javax.ws.rs.core.UriBuilder冲突,在jersey-spring内部依赖jsr311-api的jar和jersey-container-grizzly2-http内部依赖的javax.ws.rs-api的jar冲突。它们俩都是实现UriBuilder,javax.ws.rs里面实现是UriBuilderImpl, jsr311里面的实现是JerseyUriBuilder。依赖的接口和实现不同,所以冲突。

更多:Jersey+Spring,Jersey+Spring中文

刚接触Jersey,比较粗心大意,问题遇到的或许比较低级,所以记录一下,不对的地方请指正。程序猿拜上!















版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/fly_leopard/article/details/70800150
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 15:19:20
  • 阅读 ( 1732 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢