2010-08-23 15 views
2

J'ai utilisé une expression régulière dans @Path pour réaliser une surcharge et j'ai d'abord pensé que c'était vraiment bien, mais les méthodes de surcharge ne sont généralement pas une bonne pratique. Est-ce la même chose pour les services Web RESTful? Existe-t-il un meilleur moyen d'y parvenir en utilisant JAX-RS?Conseil sur la surcharge de la méthode http dans REST

Je peux maintenant appeler mon service getProject REST par/projet/ProjectNumber1000 ou/projet/12345

@Path("/project") 
public class ProjectPropertiesResource 
{ 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/{name : [a-zA-Z]+}") 
    public Response getProjectPropertiesByName(@PathParam("name") String name) 
    { 
     ... 
    } 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/{id : \\d+}") 
    public Response getProjectPropertiesById(@PathParam("id") long id) 
    { 
     ... 
    } 
} 
+1

Peut-être que c'est juste moi, mais je ne vois pas de surcharge dans votre exemple. Les deux méthodes ont des noms différents. –

+1

J'ai "surchargé" le chemin pour accéder à ces méthodes. Les méthodes elles-mêmes ont un nom différent car je n'utilise généralement pas de surcharge. – willcodejavaforfood

Répondre

6

Vous pouvez le faire, cependant, que l'une des surcharges doit retourner en fait le corps de réponse avec 200 Les autres surcharges devraient renvoyer une redirection 303 vers l'URI qui retourne le corps. Cela garantira que les caches ne possèdent qu'une seule copie de la ressource et si vous faites PUT ou POST sur l'URI principale, vous invaliderez la copie unique. Sinon, vous pouvez commencer à obtenir des résultats incohérents en raison des différentes versions existant dans le cache.

+0

OK c'est un bon point, donc je voudrais juste utiliser Response.temporaryRedirect dans l'une des méthodes – willcodejavaforfood

+0

Oui, quelque chose comme ça. 303 est en fait "Voir autre" et non "redirection temporaire". –

+0

OK le 'Utilisé dans le modèle POST/redirect/GET redirect-after-POST. commenter dans le JavaDoc m'a effrayé celui-là – willcodejavaforfood