RESTEasy - @Path, требующий полного пути?
Я возился с JAX-RS и делал приложение, которое вызывает службы REST, которые производят JSON. Я попробовал Джерси, и все прошло хорошо, но мне пришлось переключиться на 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>
Поэтому я ожидаю, что каждый URL, начинающийся с /rest, будет обрабатываться 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.
В моем классе, однако, работала с изменением @Path("/services")
до @Path("/rest/services")
. У вас есть идея, почему я получил это странное поведение? Все обучающие программы/документы, которые я прочитал, упоминают только относительные пути, не включая префикс/rest...
Ответы
Ответ 1
Решение: добавьте следующее в свой 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)
Ответ 2
В JBoss AS 7.1 мне также пришлось добавить, чтобы добавить
resteasy.resources...
который далее поясняется здесь
http://www.javaroots.com/2013/05/creating-rest-services-with-rest-easy.html
Вы можете получить такую ошибку: Не удалось найти ресурс для родственника:/application/test полного пути:...
Вы должны определить параметр resteasy.resource context с полным путем класса Rest.