Jersey REST und PathParam reguläre Ausdrücke
-
26-12-2019 - |
Frage
Ich versuche, mit Jersey einen REST-Webdienst zu entwickeln.Meine Anforderung besteht darin, dass ich auf den Webdienst zugreifen und Daten zurückgeben kann, basierend auf den übergebenen PatParam-Parametern.Mein Webservice sieht bisher wie folgt aus:
@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;
}
Mit dem obigen Code im Hinterkopf versuche ich Folgendes zu erreichen:
http://localhost:8080/Jersey/RestService/1.0/people.json
Sollte die Liste aller Personen im „json“-Format zurückgeben (daher die Erweiterung .json)
Jetzt möchte ich in der Lage sein, die Informationen für eine bestimmte Person abzurufen, indem ich einfach die ID der Person eingebe und die Informationen der Person basierend auf der Erweiterung in json/xml zurückgebe:
http://localhost:8080/Jersey/RestService/1.0/people/Mouhammed89.json
Mit der obigen URL sollte ich die Informationen für die PersonId zurückgeben:Mouhammed89 und Rückgabe der Informationen im JSON-Format.
Ich weiß, dass mein Problem bei den regulären Ausdrücken liegt, die ich verwende, daher würde ich mich sehr über Hilfe bei der Erstellung freuen.
Lösung
IMHO-Container (List
) und Artikel (Person
) URL
sollten gesondert behandelt werden.Und Sie benötigen keine explizite Angabe .json
Präfix für die Rückkehr JSON
Antwort, nur die Anmerkung am API
Das Niveau sollte ausreichen.
@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
..
}