多Jar项目中Jersey 2.x REST服务404问题求web.xml配置方案
解决Jersey 2.x多模块REST服务404问题的web.xml配置
核心问题
Jersey 2.x默认仅扫描当前Web项目类路径下的REST资源,Jar包中的资源需要显式配置扫描路径才能被识别。以下是针对你的场景的正确配置方案:
基础配置(解决项目1自身API的404)
替换项目1的web.xml为以下内容,重点注意Servlet类和包扫描参数:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>Jersey REST Service</servlet-name> <!-- 必须使用Jersey 2.x的Servlet容器类,不要用1.x的com.sun开头的类 --> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <!-- 配置项目1的REST资源所在包,替换为实际路径 --> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.yourproject1.rest</param-value> </init-param> <!-- 启动时加载Servlet,避免首次请求延迟 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <!-- 映射所有API请求到Jersey,可根据需求调整,比如/api/*或/* --> <url-pattern>/api/*</url-pattern> </servlet-mapping> </web-app>
扩展配置(同时解决项目2 Jar中API的404)
如果需要同时加载项目2中的REST服务,只需在包扫描参数中添加项目2的资源包路径,用逗号分隔:
<init-param> <param-name>jersey.config.server.provider.packages</param-name> <!-- 逗号分隔项目1和项目2的REST包路径 --> <param-value>com.yourproject1.rest, com.yourproject2.rest</param-value> </init-param>
关键注意事项
- 不要混淆Jersey版本:确保使用
org.glassfish.jersey.servlet.ServletContainer,而非Jersey 1.x的com.sun.jersey.spi.container.servlet.ServletContainer,这是导致404的常见原因。 - 路径匹配检查:确认
url-pattern与你的API请求路径匹配,例如配置/api/*后,API请求应为http://localhost:8080/项目名/api/你的资源路径。 - 验证资源注解:Jar中的REST类必须标注
@Path注解,方法需添加@GET/@POST等HTTP方法注解,否则Jersey无法识别。 - 日志排查:可添加日志配置查看资源加载情况,帮助定位问题:
<init-param> <param-name>jersey.config.server.logging.level</param-name> <param-value>FINE</param-value> </init-param>
内容的提问来源于stack exchange,提问作者user9976805
相关产品推荐
相关产品推荐

