我正在搞乱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 of full path:http://localhost/MyContext/rest/services/service1
这意味着RESTEasy处理了请求但找不到绑定到此URL的任何服务。
在我的课堂上,将@Path("/services")
更改为@Path("/rest/services")
仍然有效。你知道我为什么会有这种奇怪的行为吗?我读过的所有教程/文档都只提到了相对路径,不包括/ rest前缀...
答案 0 :(得分:25)
解决方案:在web.xml中添加以下内容
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
在哪里/休息是<url-pattern>/rest/*</url-pattern>
(资料来源:http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/Installation_Configuration.html#d0e72)
答案 1 :(得分:0)
在JBoss AS 7.1上,我还必须添加添加 resteasy.resources ... 这将进一步解释 http://www.javaroots.com/2013/05/creating-rest-services-with-rest-easy.html 你可能会得到这样的错误:无法找到相对的资源:/ application / test of full path:... 您必须使用Rest类的完整路径定义resteasy.resource上下文参数。