2010-04-21 4 views
2
Redéfinition

J'ai essayé de faire une application Jersey qui prend la structure suivante du chemin:@Path à Jersey

Exemple 1 (http: // omis en raison des restrictions stackoverflow) example.com/source/{source id}/ example.com/source/

Avec code (gestion des erreurs et le code inutiles omis):

Avec code (résumé):

@Path("/source/") 
public class SourceREST { 
... 
@GET 
public Response getSource() { 
    return Response.ok("Sources List (no field)").build(); 
} 

@GET 
@Path("/{source-id}") 
public Response getSource(@PathParam("source-id") String sourceID) { 
    return Response.ok("Source: " + sourceID).build(); 
} 

} 

Cela fonctionne très bien.

Exemple 2: example.com/data/{source-id}/{info-id}/ example.com/data/{source-id}/

Avec code (gestion des erreurs et inutiles Code omis):

@Path("/data/") 
public class DataREST { 
... 

@GET 
@Path("/{source-id}") 
public Response getContext(@PathParam("source-id") String sourceID) { 
    return Response.ok("Source: " + sourceID + " Last ContextInfo").build(); 
} 

@GET 
@Path("/{source-id}/{data-id}") 
public Response getContext(@PathParam("source-id") String sourceID, 
    @PathParam("data-id") String dataID) { 
    return Response.ok("Source: " + sourceID + " Data: " + dataID).build(); 

} 
} 

Dans l'exemple 2, je peux accéder à une URL comme example.com/data/111/222/ bien, mais en essayant d'obtenir hexample.com/data/111/ me donne une erreur 405 Code (méthode non autorisée). J'ai aussi essayé de faire une méthode entière qui vérifie si {data-id} est vide ou vide et dans ce cas, traite la pétition comme dans la première méthode, mais ne fonctionne pas non plus.

Une idée?

Merci!

+0

Avez-vous essayé example.com/data/111 (sans barre oblique)? – Jonas

+0

Merci pour la question, exactement ce que je cherchais – Genry

Répondre

0

Vous pouvez essayer d'utiliser le chemin pour la ressource racine comme @Path("/data/{source-id}"). Alors la première méthode aurait seulement l'annotation @GET alors que la seconde aurait @GET @Path("{data-id}"). De plus, je suggère d'utiliser des noms de méthodes différents (bien qu'ils effectuent probablement différentes actions), mais je ne suis pas sûr que ce soit la cause de votre problème.