2012-07-18 11 views
16

Ho un endpoint molto semplice che utilizza Jersey. Il mio URL è statico, non richiede alcun parametro di richiesta. Ecco come si presenta:Jersey restituisce lo stato HTTP 405 - Metodo non consentito

@GET 
@Path("/mydata") 
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) 
public String getData() { 
    return "{'name': 'value'}"; 
} 

Tuttavia, ogni volta che chiedo questo URL, ricevo sempre un codice di stato HTTP 405 - Metodo non consentito.

La cosa strana è che se cambio l'annotazione @Path e definisco una variabile di percorso, ad es. @Path("/chart/{blah}") funziona correttamente.

Qualcuno ha un'idea del motivo per cui devo definire una variabile di percorso per farlo funzionare? Non ho bisogno di una variabile di percorso e sembra sciocco aggiungerne uno solo per ottenere una risposta di 200.

+1

Come stai richiedendo l'URL? per esempio. - pubblica l'URL che stai tentando di utilizzare. –

+0

L'URL che sto utilizzando è: http: // localhost: 8080/mydata – seedhead

risposta

10

Grazie per i suggerimenti. Finì per essere io, stupidamente, inserendo un modello di URL errato per la mia maglia SpringServlet. E 'stato / invece di /*

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
</servlet> 

<url-pattern>/*</url-pattern> 

<servlet-mapping> 
    <servlet-name>Chart Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
3

Penso che probabilmente è perché è stato specificato

@Produces(MediaType.APPLICATION_JSON). 

1) Forse si dovrebbe provare a eseguire quanto segue in un terminale

curl -i -X GET -H 'Accept:application/json' http://localhost:8080/mydata 

2) Oppure provate modifica

@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_HTML}) 
+1

Grazie per il suggerimento, sfortunatamente entrambi i risultati restituiscono ancora un 405. – seedhead

+0

@seedhead mi dispiace, puoi provare di nuovo il metodo 1? Mi sono reso conto che copio e incollato l'intestazione sbagliata – tanyehzheng

4

Annotare la classe anziché il metodo:

@Path("/mydata") 
public class MyClass(){ 

@GET 
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) 
public String getData() { 
    return "{'name': 'value'}"; 
} 

} 

Non so perché, ma mi dà anche problemi nella direzione opposta

Problemi correlati