Jersey REST y PathParam expresiones regulares
-
26-12-2019 - |
Pregunta
Estoy intentando utilizar Jersey para desarrollar un servicio web REST.Mi requisito es poder acceder al servicio web y devolver datos, según los parámetros de PatParam pasados.Mi servicio web hasta el momento es el siguiente:
@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;
}
Con el código anterior en mente, lo que intento lograr es lo siguiente:
http://localhost:8080/Jersey/RestService/1.0/people.json
Debería devolver la lista de todas las personas en formato "json" (de ahí la extensión .json)
Ahora, quiero poder obtener la información de una persona en particular simplemente ingresando el ID de la persona y devolver la información de la persona en json/xml según la extensión:
http://localhost:8080/Jersey/RestService/1.0/people/Mouhammed89.json
Con la URL anterior, debería devolver la información del ID de persona:Mouhammed89 y devolver la información en formato json.
Sé que mi problema está en las expresiones regulares que estoy usando, así que agradecería mucho la ayuda para crearlas.
Solución
Contenedor en mi humilde opinión (List
) y elemento (Person
) URL
debe manejarse por separado.Y no requieres explícito .json
prefijo para regresar JSON
respuesta, sólo la anotación en el API
El nivel debería ser suficiente.
@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
..
}