17

私は JAX-RS をいじっていて、JSON を生成する REST サービスを呼び出すアプリケーションを作成しました。Jersey を試してみたところ、すべて問題なく動作しましたが、アプリケーションを JDK5 でビルドする必要があるため、RESTEasy に切り替える必要がありました。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 プレフィックスを含まない相対パスのみが記載されていました...

4

2 に答える 2

25

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

于 2010-11-09T11:26:52.123 に答える
0

JBoss AS 7.1では、resteasy.resourcesを追加するために追加する必要もありました...これについては、ここでさらに説明します http://www.javaroots.com/2013/05/creating-rest-services-with-rest-easy.html あなた次のようなエラーが発生する可能性があります: 相対パスのリソースが見つかりませんでした: フル パスの /application/test:... Resteasy.resource コンテキスト パラメータを Rest クラスのフル パスで定義する必要があります。

于 2014-04-06T13:28:48.220 に答える