是否可以仅使用注释设置JAX-RS应用程序?(使用Servlet 3.0和JAX-RS Jersey 1.1.0)
我试过,没有运气.web.xml似乎需要使用一些.
配置A(工作,但具有web.xml配置)
web.xml中
...
<servlet>
<servlet-name>org.foo.rest.MyApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>org.foo.rest.MyApplication</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
Run Code Online (Sandbox Code Playgroud)
Java的
@ApplicationPath("/")
public class MyApplication extends Application {
...
}
Run Code Online (Sandbox Code Playgroud)
配置B(不工作,抛出异常)
@ApplicationPath("/")
@WebServlet("/*") // <--
public class MyApplication extends Application {
...
}
Run Code Online (Sandbox Code Playgroud)
后者似乎坚持认为Application将是Servlet的子类(例外不会留下任何猜测)
java.lang.ClassCastException: org.foo.rest.MyApplication cannot be cast to javax.servlet.Servlet
Run Code Online (Sandbox Code Playgroud)
问题
为什么web.xml定义有效,但注释没有?有什么不同?
有没有办法使它工作,例如有一个没有web.xml的JAX-RS应用程序?
我正在尝试使用JX-RS创建Java EE应用程序.我使用以下配置工作:
@ApplicationPath("rs")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>();
// register root resource
classes.add(ProbeREST.class);
return classes;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我更喜欢使用web.xml进行配置.我认为与简单的xml配置相比,上面的内容非常难看,如下所示:
<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_3_1.xsd"
version="3.1">
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试部署应用程序时,收到错误:
Exception while deploying the app [my_app] : There is no web component by the name of javax.ws.rs.core.Application here.
Run Code Online (Sandbox Code Playgroud)
我该如何防止此错误?