Sangeet Menon Sangeet Menon - 1 year ago 126
JSON Question

Retrieve the data sent as JSON from JavaScript, inside a servlet

I have a query on retrieving data sent as JSON from a JavaScript, inside a Java servlet.
Following is what I am doing...

This is the part of the code inside JavaScript making a request to a servlet

type : "POST",
url: 'getInitialData',
datatype: 'json',
data : ({items :[{ name: "John", time: "2pm" },{name: "Sam", time: "1pm" }]}),
success: function(data) {
////Code to be handeled where response is recieved

On making this request I try to retrieve the parameters sent from JavaScript in a Servlet, but while doing so I was firstly confused on how to retrieve the dat from the request

I used the following in my servlet:

NOTE : the content Type in my Servlet is set to : apllication/json



the above showed me the data as below, but I was not able figure out how to work and get the actual data

{items[1][name]=[Ljava.lang.String;@1930089, items[0][time]=[Ljava.lang.String;@860ba, items[1][time]=[Ljava.lang.String;@664ca, items[0][name]=[Ljava.lang.String;@1c334de}

while the following code gave me Exception of null which was expected.


Among the others i tried where request.getParameter(); request.getParameterNames(); but in vain...

Am I in a wrong direction? Please guide me!
Please let me know how to retieve these value.

Thank You for reading this long post...


Answer Source

The request parameter map is a Map<String, String[]> where the map key is the parameter name and map value are the parameter values --HTTP allows more than one value on the same name.

Given the printout of your map, the following should work:

String item0Name = request.getParameter("items[0][name]");
String item0Time = request.getParameter("items[0][time]");
String item1Name = request.getParameter("items[1][name]");
String item1Time = request.getParameter("items[1][time]");

If you want a bit more dynamics, use the following:

for (int i = 0; i < Integer.MAX_VALUE; i++) {
    String itemName = request.getParameter("items[" + i + "][name]");
    String itemTime = request.getParameter("items[" + i + "][time]");

    if (itemName == null) {

    // Collect name and time in some bean and add to list yourself.

Note that setting the response content type is irrelevant when it comes to gathering the request parameters.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download