我在搞乱 JAX-RS 并制作了一个应用程序,它调用产生 JSON 的 REST 服务。我尝试了 Jersey,一切都很好,但我不得不切换到 RESTEasy,因为我的应用程序需要使用 JDK5 构建。我将 web.xml 更改为如下内容:
<web-app>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>RESTEasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RESTEasy</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>
所以我希望每个以 /rest 开头的 URL 都由 RESTEasy 处理。我的服务如下:
@Path("/services")
public class MyRESTServices {
@GET
@Path("service1")
@Produces(MediaType.APPLICATION_JSON)
public Object service1(Blah blah) {
}
}
使用 Jersey 可以正常工作,http://localhost/MyContext/rest/services/service1绑定到我的 service1() 方法。但是,当我更改为 RESTEasy 时,我有一个 404:
HTTP 状态 404 - 找不到相对资源:/rest/services/service1 的完整路径:http://localhost/MyContext/rest/services/service1
这意味着 RESTEasy 处理了请求,但找不到绑定到此 URL 的任何服务。
不过,在我的课上,@Path("/services")
改为@Path("/rest/services")
工作。你知道我为什么会有这种奇怪的行为吗?我读过的所有教程/文档都只提到了相对路径,不包括 /rest 前缀......