Я был возиться с JAX-RS и сделал приложение, которое вызывает службы REST, которые производят JSON. Я попробовал Джерси, и все прошло хорошо, но мне пришлось переключиться на RESTEasy, поскольку мое приложение должно быть построено с помощью JDK5. Я изменил мой web.xml на что-то вроде этого:RESTEasy - @Path, требующий полного пути?
<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, начиная с/остальной частью будет обрабатываться 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 Status 404 - Не удалось найти ресурс для относительного:/отдых/услуги/Service1 полного пути: http://localhost/MyContext/rest/services/service1
Это означает, что RESTEasy обработал запрос, но не смог найти службу, связанную с этим URL-адресом.
На мой класс, сменив @Path("/services")
на @Path("/rest/services")
, работал. У вас есть идея, почему я получил это странное поведение? Все учебники/документы я прочитал только упоминалось относительные пути, не включая префикс/отдыха ...
Как вы настраиваете RESTEasy внутри? С CXF мне нужно настроить удаление фрагмента '/ rest' в моем конфигурационном файле Spring. –
Я не настраиваю ничего, что вы можете увидеть в web.xml (сканирование аннотаций). Я посмотрю, можно ли настроить удаление. –
Позор мне, это было прямо передо мной в документах: «Переменная resteasy.servlet.mapping.prefix должна быть установлена, если ваше сервлет-отображение для сервлета Resteasy имеет url-pattern other чем/* " –