I have a Servlet that is responding to GET requests as expected. The problem is that POST requests are not getting handled by my Servlet, rather by SlingPostServlet according to /system/console/requests
. My Servlet is using the SCR annotations.
@SlingServlet(
methods = {"POST","GET"},
resourceTypes = {"company/components/pages/thepage"},
extensions = { "html" },
selectors = { "edit" },
generateService = true,
generateComponent = true,
name = "com.company.services.osgi.package.EditServlet",
label = "Profile Update Handler"
)
@Properties({
@Property(name = "service.vendor", value = "Our Company"),
@Property(name = "service.description", value = "Update Handler") })
public class EditServlet extends SlingAllMethodsServlet {
...
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response){
// during GET requests this code works!
}
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response){
// during POST requests this code is not executing
}
I see in http://localhost:4502/system/console/components that my servlet properties are set, and is active
component.id = 3463
component.name = com.company.services.osgi.package.EditServlet
sling.servlet.methods = [POST, GET]
sling.servlet.resourceTypes = [company/components/pages/thepage]
sling.servlet.selectors = [edit]
sling.servlet.extensions = [html]
I don't see errors when the bundle is installed. It seems both are REGISTERED
15.07.2015 13:05:24.017 INFO [OsgiInstallerImpl] org.apache.sling.servlets.resolver.internal.SlingServletResolver Registered ServletResourceProvider: servlet=com.company.services.osgi.package.EditServlet, paths=[/libs/foundation/components/primary/company/components/pages/thepage/edit.html.POST.servlet, /libs/foundation/components/primary/company/components/pages/thepage/edit.html.GET.servlet]
I've confirmed the page has the correct resourceType (if it didn't then I suppose the doGet would also not be working). What an I doing wrong with POST? Any ideas why doGet works but doPost doesn't?
Update
The only way I can get this working was to create another servlet for the doPost which operates on resourceTypes = {"sling/servlet/default" },
I updated the first one removing POST from methods
@SlingServlet(
methods = {"POST"},
// resourceTypes = {"company/components/pages/thepage"},
resourceTypes = {"sling/servlet/default" },
extensions = { "html" },
selectors = {"post-servlet"} ,
generateService = true,
generateComponent = true,
name = "com.company.services.osgi.people.UpdateServlet",
label = "Update Handler",
metatype=true
)