Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Adobe Summit 2023 [19th to 23rd March, Las Vegas and Virtual] | Complete AEM Session & Lab list

Writing a custom json servlet


Level 5

I'm struggling to override the default out of the box json servlet. I want to create my own for a specific resource type and when a specific selector is used. However it seems to keep calling the default. To be clear I want to keep the default servlet in all other scenarios. My annotations for the custom servlet are:

@SlingServlet(methods = {HttpConstants.METHOD_GET},
   metatype = true,
   resourceTypes = {"wtr/components/structure/offertypepage"},
   selectors = {"mapper"},
   extensions = {"json"})

and if i call this servlet e.g. /path/to/resource.mapper.json I get an error from the default json servlet complaining that mapper is not a valid selector. IF i switch the extension to html then it works fine...but obviously returning json from .html is not ideal. Also if i called /path/to/resource.2.json then I'd like the normal ootb json servlet to work (ideally).

2 Replies


Level 10

Looks like you are binding your Servlet by Resource type. In our article on this subject - this works:


    methods = {"GET"},

    metatype = true,

    resourceTypes = {"services/powerproxy"},

    selectors = {"groups"})

Make sure you cover everything we should here: Adobe Experience Manager Help | Binding Adobe Experience Manager Servlets to ResourceTypes


Level 4

Hi Sutty100

The order of selectors calling is as follows:

- sling:resourceType is hr/jobs then it will be looking at /apps/hr/jobs/jobs.POST.esp

- /content/corporate/jobs/developer.pdf  will be looked at /apps/hr/jobs/jobs.pdf.esp

- if no sling resourcetype is present then:

- /content/corporate/jobs/developer.html will be looked at /apps/content/corporate/jobs/

- if not then default folder /libs will be looked for rendering

What you need to do is now create a new selector file at /apps/wtr/components/structure/offertypepage.json.esp It should work with your JSON extension.

Hope this helps.