Java 运行Jersey REST服务时未找到提供程序类
我对Java非常陌生,我已经按照教程创建了JAX-RS服务,我所做的一切都是按照教程进行的,但无法让它工作。我已附上屏幕截图和日志 WEB.XMLJava 运行Jersey REST服务时未找到提供程序类,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,我对Java非常陌生,我已经按照教程创建了JAX-RS服务,我所做的一切都是按照教程进行的,但无法让它工作。我已附上屏幕截图和日志 WEB.XML <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="h
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>com.duo.test</display-name>
<servlet>
<servlet-name>Jersey Rest Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.duo.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Rest Service</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
输出:
URL映射错误,应该是
<servlet-mapping>
<servlet-name>Jersey Rest Service</servlet-name>
<url-pattern>/v1/*</url-pattern>
</servlet-mapping>
其中一个问题,我发现有错误
com.sun.jersey.api.core.ScanningResourceConfig init INFO: No provider classes found.
正在Rest服务类中使用Lambda表达式(Java8)。
如果在下面的web.xml文件中指定的包中使用lambda,则Jersey无法扫描批注:
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.duo.test</param-value>
</init-param>
com.sun.jersey.config.property.packages
com.duo.test
此问题的解决方案是删除指定包中任何类中的Lambda
注意:这可能只是Jersey 1.x的一个问题,我还没有尝试使用Jersey 2.x。删除Lambda帮助我暂时解决了这个问题。当我遇到这个问题时,它似乎正在将jersey从1.0.2升级到1.1x,日志会说
INFO: Root resource classes found:
class org.x.y.MyClass
No provider classes found.
然后一切都将是404,即使它说webapp成功部署,但根本无法实现
原来我的
<servlet-mapping>
<servlet-name>Webapp Human name</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Webapp人名
/
在web.xml
中,对于新版本的jersey来说已经不够好了,它需要改进
/*
参考:看看这个。将@Path(“/v1/status/*”)替换为@Path(“/v1/status/”)/“/”不起作用,需要是“/”?!我没有收到。@w35l3y哦,应该是
/*
更新的,谢谢你的提示。
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.duo.test</param-value>
</init-param>
INFO: Root resource classes found:
class org.x.y.MyClass
No provider classes found.
<servlet-mapping>
<servlet-name>Webapp Human name</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>