POST Servlet using Page resource type - Unable to pass form data

Avatar

Avatar

santhoshsrg

Avatar

santhoshsrg

santhoshsrg

14-05-2020

Hi everyone,

 

I wanted to create a POST servlet using Resource Type and pass form data. I will be calling this servlet from Component X which is an embedded component. I created a POST servlet using Page component's resourceType. It works fine when form data is not passed. But when form data is passed, it is throwing some exceptions like in the screenshot below. The data i am trying to pass is "img" as in screenshot.

 

I also tried to create POST servlet using Component Y's resourceType and i was able to pass form data here. Since I am using an embedded component, Servlet using Page resource type will be apt for this.

 

Any help would be great. 

 

Screenshot 2020-05-14 at 7.31.47 PM.pngScreenshot 2020-05-14 at 7.31.02 PM.png

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

santhoshsrg

Avatar

santhoshsrg

santhoshsrg

18-05-2020

I did a small mistake. I was using URL as pagePath.save.html in ajax to hit my servlet. 

Then i changed URL to pagePath_jcr_content.save.html. This worked.

 

Thank you all for you inputs!

Answers (6)

Answers (6)

Avatar

Avatar

Shashi_Mulugu

MVP

Avatar

Shashi_Mulugu

MVP

Shashi_Mulugu
MVP

15-05-2020

If asset creation is the moto, why cant you use the Assets HTTP API?

https://docs.adobe.com/content/help/en/experience-manager-65/assets/extending/mac-api-assets.html

 

And if you want to use your custom servlet, try the following link

 

https://helpx.adobe.com/experience-manager/using/uploading-files-aem1.html

Avatar

Avatar

santhoshsrg

Avatar

santhoshsrg

santhoshsrg

15-05-2020

Hi,

 

I am passing Image in base64 format to servlet as form data and in servlet i am uploading image to asset. The issue occurs before servlet code ran. 

 

JS Code:

let data = {img: img};
$.ajax({
type: "POST",
url: url,
data,
success: function (response) {
displayModal(SUCCESS_MSG);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
    displayModal(ERROR_MSG);
}
}).done(function() {
    $(".logo-mobile img").show();
});

 

Servlet code: 

@component(immediate = true, service = Servlet.class,

property={

        "sling.servlet.methods=" + HttpConstants.METHOD_POST,

        "sling.servlet.resourceTypes="+ "project/components/structure/page",

        "sling.servlet.selectors=" + "save",

        "sling.servlet.extensions=" + "html"

})

public class SaveScreenshotServlet extends SlingAllMethodsServlet  {

@Override

protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)

throws ServletException, IOException {

    String img = request.getParameter(IMG_PARAM);

}

Avatar

Avatar

Shashi_Mulugu

MVP

Avatar

Shashi_Mulugu

MVP

Shashi_Mulugu
MVP

15-05-2020

@santhoshsrg Can you paste some code snippet how are you trying to read the payload from the request. Also you said, you want to post formdata but in your question you commented as posting image. Can you please confirm what exactly you are trying to post and how are you reading payload from request.

 

This will help us to help you.

Avatar

Avatar

santhoshsrg

Avatar

santhoshsrg

santhoshsrg

14-05-2020

@smacdonald2008 @atyaf66 @Arun_Patidar Could you please share your input on this?

Avatar

Avatar

santhoshsrg

Avatar

santhoshsrg

santhoshsrg

14-05-2020

I am just using POST servlet to upload image to asset. But I am not able to pass any data. When i didn't pass data, servlet is working fine.

Avatar

Avatar

Ankur_Khare

MVP

Avatar

Ankur_Khare

MVP

Ankur_Khare
MVP

14-05-2020

Nothing to do with page or component resource type.

Where are you trying to post this data to?