web-dev-qa-db-ja.com

RESTEasy- @ Pathにはフルパスが必要ですか?

私は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 はmy service1()メソッドにバインドされていました。しかし、RESTEasyに変更すると、404がありました。

HTTPステータス404-相対パスの/ rest/services/service1のリソースが見つかりませんでした: http:// localhost/MyContext/rest/services/service1

つまり、RESTEasyはリクエストを処理しましたが、このURLにバインドされたサービスを見つけることができませんでした。

私のクラスでは、@Path("/services")@Path("/rest/services")に変更しても機能しました。なぜ私がこの奇妙な振る舞いをしたのか分かりますか?私が読んだすべてのチュートリアル/ドキュメントは、/ restプレフィックスを含まず、相対パスのみに言及していました...

17
Bastien Jansen

解決策: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

25
Bastien Jansen

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コンテキストパラメーターを定義する必要があります。

0
user2276251