Search code examples
aemsling

Is it possible to place variables into a resource path within a sling servlet?


We are trying to provide a clean URI structure for external endpoints to pull json information from CQ5.

For example, if you want to fetch information about a particular users history (assuming you have permissions etc), ideally we would like the endpoint to be able to do the following:

/bin/api/user/abc123/phone/555-klondike-5/history.json

In the URI, we would specifying /bin/api/user/{username}/phone/{phoneNumber}/history.json so that it is very easy to leverage the dispatcher to invalidate caching changes etc without invalidating a broad swath of cached information.

We would like to use a sling servlet to handle the request, however, I am not aware as to how to put variables into the path.

It would be great if there were something like @PathParam from JaxRS to add to the sling path variable, but I suspect it's not available.

The other approach we had in mind was to use a selector to recognise when we are accessing the api, and thus could return whatever we wanted to from the path, but it would necessitate a singular sling servlet to handle all of the requests, and so I am not happy about the approach as it glues a lot of unrelated code together.

Any help with this would be appreciated.


UPDATE:

If we were to use a OptingServlet, then put some logic inside the accepts function, we could stack a series of sling servlets on and make the acceptance decisions from the path with a regex.

Then during execution, the path itself can be parsed for the variables.


Solution

  • It is now possible to integrate jersy(JAX-RS) with CQ. We are able to create primitive prototype to say "Hello" to the world.

    https://github.com/hstaudacher/osgi-jax-rs-connector

    With this we can use the @PathParam to map the requests

    Thanks and Regards, San