Expressions régulières Jersey REST et PathParam
-
26-12-2019 - |
Question
J'essaie d'utiliser Jersey pour développer un service Web REST.Mon exigence est que je puisse accéder au service Web et renvoyer des données, en fonction des paramètres PatParam transmis.Jusqu'à présent, mon service Web est le suivant :
@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes({ "application/xml", "application/json", "application/x-www-form-urlencoded" })
@Path("/1.0/people{extension:(.json)*}/{personId:([^/]+?)?}{entityExtension:(.json)*}")
public String getLocation(@PathParam("extension") String extension, @PathParam("personId") String personId,@PathParam("entityExtension") String entityExtension)
{
if ((personId==null ||personId.equals("")) && (extension == null || extension.equals("")))
return "No Id, and no extension";
else
return "personId= "+personId + ", extension= " + extension+", entityExtension= "+entityExtension;
}
Avec le code ci-dessus à l'esprit, ce que j'essaie de réaliser est le suivant :
http://localhost:8080/Jersey/RestService/1.0/people.json
Doit renvoyer la liste de toutes les personnes au format "json" (d'où l'extension .json)
Maintenant, je veux pouvoir obtenir les informations sur une personne particulière en mettant simplement l'identifiant de la personne et renvoyer les informations de la personne en json/xml en fonction de l'extension :
http://localhost:8080/Jersey/RestService/1.0/people/Mouhammed89.json
Avec l'URL ci-dessus, je devrais renvoyer les informations pour le personId :Mouhammed89, et renvoyant les informations au format json.
Je sais que mon problème vient des expressions régulières que j'utilise, j'apprécierais donc vraiment votre aide pour les créer.
La solution
Conteneur à mon humble avis (List
) et l'article (Person
) URL
doivent être traités séparément.Et vous n'avez pas besoin d'explicite .json
préfixe pour revenir JSON
réponse, seule l'annotation à la API
le niveau devrait suffire.
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people") //no need for .json suffix as API only return JSON format
public List<String> allLocations(..){ //jackson etc. will convert return type to json string
..
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people/{personId: \\d+}")//digits only
public String getLocation(..){ //jackson etc. will convert return type to json string
..
}