私は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プレフィックスを含まず、相対パスのみに言及していました...
解決策: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 )
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コンテキストパラメーターを定義する必要があります。