简体   繁体   中英

Sending json from js to controller with ajax post

I'm having trouble sending a json object from javascript to java controller,

Ajax :

var xmlHttp = getXmlHttpRequestObject();
if(xmlHttp) {
        var jsonObj = JSON.stringify({"title": "Hello","id": 5 });
        xmlHttp.open("POST","myController",true);
        xmlHttp.onreadystatechange = handleServletPost;
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.send(jsonObj);
    }
function handleServletPost() {
    if (xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            alert(window.succes);
        }
    }
}

What I tried in Java:

public void process(
        final HttpServletRequest request, final HttpServletResponse response,
        final ServletContext servletContext, final TemplateEngine templateEngine) 
        throws Exception {

     String jsonObj = request.getParameter("jsonObj");
}

They all are null.

I tried reading related posts and multiple ways of sending the data but same result. I don't know how to use Jquery for ajax, so I'm looking for a js solution mainly.

Can someone tell me what I'm missing? As I spent about three hours trying to figure it out

To get your JSON sent with a POST request, you have to read the body of the request in a doPost method. Here's one way to do it :

protected void doPost(HttpServletRequest hreq, HttpServletResponse hres)
throws ServletException, IOException {
    StringWriter sw = new StringWriter();
    IOUtils.copy(hreq.getInputStream(), sw, "UTF-8");
    String json = sw.toString();

And then you'll have to parse the JSON. This may be done for example using Google gson .

Supposing you have a class Thing with public parameters id and title , this would be

Gson gson = new GsonBuilder().create();
Thing thing = gson.fromJson(json, Thing.class);
int id = thing.id;
String title = thing.title;

Of course there are other solutions than gson to parse JSON but you have to parse it.

I think you are confusing URL parameters with request body. To get json string from request you need read it from request.getReader() .

I have figured it out.

The Json should be sent like this:

xmlHttp.send("jsonObj="+jsonObj);

instead of

xmlHttp.send(jsonObj);

In order to receive it as parameter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM