RESTEasy - @Path需要完整路径?

2022-09-03 01:16:54

我正在搞砸JAX-RS,并制作了一个应用程序,该应用程序调用生成JSON的REST服务。我尝试了泽西岛,一切顺利,但我不得不切换到RESTEasy,因为我的应用程序需要用JDK5构建。我将我的网络.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) {

    }
}

使用泽西岛可以正常工作,http://localhost/MyContext/rest/services/service1 绑定到我的service1()方法。但是,当我切换到RESTEasy时,我有一个404:

HTTP 状态 404 - 找不到完整路径的相对资源:/rest/services/service1:http://localhost/MyContext/rest/services/service1

这意味着 RESTEasy 处理了请求,但找不到绑定到此 URL 的任何服务。

不过,在我的课堂上,改为工作。你知道我为什么会有这种奇怪的行为吗?我阅读的所有教程/文档都只提到了相对路径,不包括/rest前缀...@Path("/services")@Path("/rest/services")


答案 1

解决方案:在 Web 中添加以下内容.xml

<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
</context-param>

其中 /rest 是你的<url-pattern>/rest/*</url-pattern>

(资料来源:http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/Installation_Configuration.html#d0e72)


答案 2

在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 上下文参数。


推荐