AEM 6.5 multipart form JSON data servlet processing | Community
Skip to main content
srinivas_chann1
Level 7
February 21, 2023
Solved

AEM 6.5 multipart form JSON data servlet processing

  • February 21, 2023
  • 2 replies
  • 1746 views

Hello,

 

Could some help me on the below and provide me with pointers.

I have multipart form data being feed to servlet in the below JSON format.
My need is to read this and send the file and JSON data to another endpoint in the same JSON format with encoding of few values

 

 

Form JSON data to servlet:-

{
"param1": "value1",
"parm2": "value2",

"josnobjectParam1": {
"jsonobjparam1": "value3",
"jsonobjparam2": "value4"
},

"josnobjectParam2": {
"jsonobjparam3": "value5",
"jsonobjparam4": "value6"
},

"filesent": [
{filename: "name.pdf"}
]
}

 

A>How could I achieve it.

In the servlet ,I am trying to read the json form data using request.getRequestParameterMap and adding it to MultipartEntityBuilder . Now when reading the value of josnobjectParam1 and josnobjectParam2 it shows as object .How to read the values inside it .For example the key jsonobjparam1  and its value

I was using the below link as reference
https://github.com/Adobe-Consulting-Services/acs-aem-commons/blob/master/bundle/src/main/java/com/adobe/acs/commons/wcm/impl/TagWidgetConfigurationServlet.java#L147

 

MultipartEntityBuilder requestEntity = MultipartEntityBuilder.create();


Map < String, RequestParameter[] > requestParameters = request.getRequestParameterMap();
for (final Map.Entry < String, RequestParameter[] > entry: requestParameters.entrySet()) {
RequestParameter[] reqParam = entry.getValue();
if ("josnobjectParam1".equals(entry.getKey()) || "josnobjectParam2".equals(entry.getKey())) {
for (RequestParameter fileParam: reqParam) {
/** Here how to read the jsonobjparam1 , jsonobjparam2 ,jsonobjparam3 ,jsonobjparam4
Also will need to encode the value3,value4,value5,value6 before adding to requestEntity**/
String paramValue = StringUtils.defaultIfBlank(String.valueOf(reqParam[0]), StringUtils.EMPTY);
requestEntity.addPart(entry.getKey(), paramValue);
}
}
}

b> Now  need to send the MultipartEntityBuilder data to other end point in JSON format , how to achieve it
I was using the below link as reference
https://gist.github.com/damianmcdonald/b720d9798e0d84092bbd#L39

 

requestEntity.addTextBody("characterProfile", jsonToSend.toString(), ContentType.APPLICATION_JSON);

can we add like the above and send to another endpoint .please clarify and also I would want to just send the JSON data without any key is that possible so that it is sent as object

{
"param1": "value1",
"parm2": "value2",

"josnobjectParam1": {
"jsonobjparam1": "value3",
"jsonobjparam2": "value4"
},

"josnobjectParam12": {
"jsonobjparam3": "value5",
"jsonobjparam4": "value6"
},


}

 

 

Thanks,

Srinivas

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Kiran_Vedantam

Hi @srinivas_chann1 

 

You can send the file data in the form of form-data like this:

if(ajaxfile.files[0] !== undefined)
{
formData.append("file", ajaxfile.files[0]);
}

your ajax call should be like this

$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: path,
data: formData,
processData: false,
contentType: false,
cache: false,
success: function (data) {},
error: function (data, status, er) {}
});

Read the value in the servlet like this:

Part filePart = request.getPart("file");
if (filePart != null) {
}
}

Hope it helps!

Thanks,
Kiran Vedantam

2 replies

srinivas_chann1
Level 7
February 21, 2023

Any inputs on this from any one??

 

Thanks

Kiran_Vedantam
Community Advisor
Kiran_VedantamCommunity AdvisorAccepted solution
Community Advisor
February 22, 2023

Hi @srinivas_chann1 

 

You can send the file data in the form of form-data like this:

if(ajaxfile.files[0] !== undefined)
{
formData.append("file", ajaxfile.files[0]);
}

your ajax call should be like this

$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: path,
data: formData,
processData: false,
contentType: false,
cache: false,
success: function (data) {},
error: function (data, status, er) {}
});

Read the value in the servlet like this:

Part filePart = request.getPart("file");
if (filePart != null) {
}
}

Hope it helps!

Thanks,
Kiran Vedantam