web-dev-qa-db-fra.com

JAX-RS: plusieurs chemins

Est-il possible de faire quelque chose comme ça?

import javax.ws.rs.GET;
import javax.ws.rs.Path;

public class xxx
{
  @GET
  @Path(value = "path1")
  public Response m1()
  {
    ...
  }

  @GET
  @Path(value = "path2")
  public Response m2()
  {
    ...
  }
}

J'utilise RESTEasy.

41
terry207

oui vous pouvez le faire bien que vous deviez renommer vos méthodes pour que leur signature soit différente.

Mise à jour: Vérifiez la réponse de Dieter Cailliau,@Path("/{a:path1|path2}") est probablement ce que vous voulez ...

public class BlahResource{
    @GET
    @Path("path1")
    public Response m1(){
        return Response.ok("blah").build();
    }

    @GET
    @Path("path2")
    public Response m2(){
        return this.m1();
}

vous pouvez vérifier l'API de JSR-311 et son implémentation de référence nommée "jersey" ici:

API JSR311

Jersey

16
fasseg
76
Dieter Cailliau

Quelques détails supplémentaires sur l'annotation de chemin ...

Comme un état de réponses précédent, les expressions régulières à utiliser dans le mappage de déclaration de chemin annoté:

{" variable-name [ ":" regular-expression ] "} 

Vous pouvez déclarer plusieurs chemins, mais il existe également une hiérarchie de chemins qui n'était pas immédiatement évidente pour moi, le chemin annoté de classe préfixant les annotations de chemin de méthode suivantes. On pourrait écrire la classe suivante pour une option concise à chemins multiples qui pourrait être utile pour le versionnage des ressources.

@Path("/{a:v1|v2}")
@Produces("text/*")
public class BlahResource {

    @GET
    @Path("/blah")
    public Response m1() {
        return Response.ok("blah").build();
    }
}

Veuillez noter que la classe "BlahResource" a été déclarée avec le chemin "/ v1" ou "/ v2" rendant la ressource accessible en tant que:

$ curl localhost:8080/v1/blah
blah

et aussi

$ curl localhost:8080/v2/blah
blah
10
Opentuned