Pregunta Cómo escribir un único recurso JAX-RS para un número variable de parámetros de ruta


He estado escribiendo una aplicación ReST basada en JAX-RS usando Apache Wink y entendí el concepto de asociación entre parámetros de ruta a clase de manejo de recursos. Aquí veo que podemos definir caminos utilizando @Path anotación y recurso correspondiente que se llamará según el método HTTP.

Ahora estoy viendo algo como un recurso al que se debe llamar para un número variable de parámetros de ruta.

Por ejemplo Quiero mi única clase de recursos CollegeResource debería llamarse para URI como /rest/college, /rest/college/subject, /rest/college/subject/teachers,  y puede ir a cualquier número de parámetros de ruta.

Si conozco la cantidad de parámetros de ruta anteriores, podría haber logrado esto usando algo como esto /rest/college/{param1}/{param2}. Pero el número de parámetros de ruta es desconocido. Entonces sentí (puedo estar equivocado) que no puedo usar este enfoque.

Una forma más que todavía podría usar es usar los parámetros de consulta. Pero quiero que esté disponible para que sea solo como parámetros de ruta.

¿Hay alguna manera de hacer esto usando Apache Wink con cualquier otra configuración? Si no está en Apache wink, ¿alguna otra implementación de JAX-RS es compatible con esto?


6
2018-03-12 16:07


origen


Respuestas:


Puedes usar una expresión regular, como @Path("/college/{param: .*}"), luego usa List<PathSegment> como un parámetro de método. Por ejemplo

@GET
@Path("/college/{params: .*}")
public Response get(@PathParam("params") List<PathSegment> params) {
    StringBuilder builder = new StringBuilder();
    for (PathSegment seg: params) {
        builder.append(seg.getPath());
    }
    return Response.ok(builder.toString()).build();
}

C:\>curl -v http://localhost:8080/college/blah/hello/world/cool
Resultado:  blahhelloworldcool

Pero personalmente, me mantendría alejado de este tipo de cosas. Sus rutas de URI (plantillas) deberían tener algún significado semántico. Permitir un número arbitrario de parámetros de ruta, que puede no tener ningún significado, es propenso a errores, y la OMI es motivo de rediseño. Necesitaría conocer la semántica detrás de esta elección de diseño antes de poder ofrecer algún consejo.


7
2018-03-13 01:15