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 ...
Come si configura RESTEasy internamente? Con CXF, devo configurare la rimozione del frammento '/ rest' nel mio file di configurazione di Spring. –
Non configuro nient'altro che quello che si può vedere nel web.xml (scansione per annotazioni). Vedrò se la rimozione può essere configurata. –
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/* " –