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 ...


person Bastien Jansen    schedule 09.11.2010    source источник
comment
Как вы настраиваете RESTEasy внутри? С помощью CXF мне нужно настроить удаление фрагмента /rest в моем конфигурационном файле Spring.   -  person Donal Fellows    schedule 09.11.2010
comment
Я не настраиваю ничего, кроме того, что вы видите в web.xml (сканирование аннотаций). Посмотрю, можно ли настроить удаление.   -  person Bastien Jansen    schedule 09.11.2010
comment
Позор мне, это было прямо передо мной в документации: переменная resteasy.servlet.mapping.prefix ‹context param› должна быть установлена, если ваше отображение сервлета для сервлета Resteasy имеет URL-шаблон, отличный от / *   -  person Bastien Jansen    schedule 09.11.2010
comment
Не думаю, что это странно. В вашем регулярном выражении ничего не упоминается о пути / rest, поэтому resteasy не сможет об этом узнать, если вы не добавите его в обычный exp или web.xml в качестве префикса.   -  person fmucar    schedule 07.01.2011


Ответы (2)


Решение: добавьте следующее в свой 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)

person Bastien Jansen    schedule 09.11.2010
comment
Спасибо. Ваше предложение «Где ...» - вот что меня поправило. Я использовал / rest / * в элементе значения параметра. - person bmauter; 17.01.2014
comment
@Nebelmann Я хочу иметь свой URL "http://localhost:8080/MyContent/rest/services/service1" как "http://localhost:8080/MyContent/services/service1" Я не хочу отдыхать в моем шаблоне URL. Не могли бы вы мне помочь, как это определить? - person 09Q71AO534; 17.11.2014

В JBoss AS 7.1 мне также пришлось добавить, чтобы добавить resteasy.resources ... что более подробно объясняется здесь http://www.javaroots.com/2013/05/creating-rest-services-with-rest-easy.html Вы можете получить такую ​​ошибку: Может не найти ресурс для относительного: / application / test полного пути: ... Вы должны определить параметр контекста resteasy.resource с полным путем к классу Rest.

person user2276251    schedule 06.04.2014