2010-11-09 3 views
16

Я был возиться с 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"), работал. У вас есть идея, почему я получил это странное поведение? Все учебники/документы я прочитал только упоминалось относительные пути, не включая префикс/отдыха ...

+0

Как вы настраиваете RESTEasy внутри? С CXF мне нужно настроить удаление фрагмента '/ rest' в моем конфигурационном файле Spring. –

+0

Я не настраиваю ничего, что вы можете увидеть в web.xml (сканирование аннотаций). Я посмотрю, можно ли настроить удаление. –

+2

Позор мне, это было прямо передо мной в документах: «Переменная resteasy.servlet.mapping.prefix должна быть установлена, если ваше сервлет-отображение для сервлета Resteasy имеет url-pattern other чем/* " –

ответ

25

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

+0

Спасибо. Ваше предложение «Где ...» - это то, что выпрямило меня. Я использовал/rest/* в элементе param-value. – bmauter

+0

@Nebelmann Я хочу иметь свой url 'http: // localhost: 8080/MyContent/rest/services/service1" 'as' "http: // localhost: 8080/MyContent/services/service1" 'я не хочу отдохните в моем шаблоне url. Можете ли вы мне помочь, как определить, что – 09Q71AO534

0

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

Смежные вопросы