2010-11-09 17 views
16

Stavo scherzando con JAX-RS e ho creato un'applicazione che chiama i servizi REST che producono JSON. Ho provato Jersey e tutto è andato bene, ma ho dovuto passare a RESTEasy come la mia applicazione deve essere costruita con JDK5. Ho cambiato il mio web.xml a qualcosa di simile:RESTEasy - @Path richiede un percorso completo?

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

quindi mi aspetto ogni URL che inizia con/riposo per essere gestito da RESTEasy. I miei servizi sono i seguenti:

@Path("/services") 
public class MyRESTServices { 

    @GET 
    @Path("service1") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Object service1(Blah blah) { 

    } 
} 

Questo ha funzionato bene usando Jersey, http://localhost/MyContext/rest/services/service1 era destinato al metodo() il mio service1. Quando cambio a RESTEasy, però, ho avuto un 404:

HTTP Stato 404 - Impossibile trovare la risorsa per il parente:/riposo/servizi/service1 di percorso completo: http://localhost/MyContext/rest/services/service1

Il che significa che RESTEasy ha gestito la richiesta ma non è riuscita a trovare alcun servizio associato a questo URL.

Nella mia classe, tuttavia, il passaggio da @Path("/services") a @Path("/rest/services") ha funzionato. Hai idea del perché ho avuto questo strano comportamento? Tutti i tutorial/docs ho letto menzionate solo percorsi relativi, non compreso il prefisso/rest ...

+0

Come si configura RESTEasy internamente? Con CXF, devo configurare la rimozione del frammento '/ rest' nel mio file di configurazione di Spring. –

+0

Non configuro nient'altro che quello che si può vedere nel web.xml (scansione per annotazioni). Vedrò se la rimozione può essere configurata. –

+2

Vergognarmi, era proprio di fronte a me nei documenti: "La variabile resteasy.servlet.mapping.prefix deve essere impostata se la mappatura servlet per il servlet Resteasy ha un modello di URL altro di/* " –

risposta

25

Soluzione: aggiungere il seguente nella vostra web.xml

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
</context-param> 

Dove/resto è l'inizio della vostra <url-pattern>/rest/*</url-pattern>

(Fonte: http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/Installation_Configuration.html#d0e72)

+0

Grazie. La tua frase "Dove ..." è ciò che mi ha raddrizzato. Stavo usando/rest/* nell'elemento param-value. – bmauter

+0

@Nebelmann Voglio avere il mio url '" http: // localhost: 8080/MyContent/rest/services/service1 "' come '" http: // localhost: 8080/MyContent/services/service1 "' Non voglio riposa nel mio schema url. Puoi aiutarmi a definirlo – 09Q71AO534

0

su JBoss AS 7.1 ho dovuto anche aggiungere aggiungere resteasy.resources ... che viene ulteriormente spiegato qui http://www.javaroots.com/2013/05/creating-rest-services-with-rest-easy.html È possibile ottenere un errore come questo: Impossibile trovare la risorsa relativa:/application/test del percorso completo: ... È necessario definire il parametro del contesto resteasy.resource con il percorso completo della classe Rest.

Problemi correlati