使用ajax post将json从js发送到控制器

时间:2014-05-30 09:08:52

标签: java javascript ajax json

我无法将json对象从javascript发送到java控制器,

的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);
        }
    }
}

我在 Java中尝试了什么:

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

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

它们都是空的。

我尝试阅读相关帖子和多种发送数据的方式但结果相同。我不知道如何将Jquery用于ajax,所以我主要寻找js解决方案。

有人可以告诉我我错过了什么吗?因为我花了大约三个小时试图弄清楚

3 个答案:

答案 0 :(得分:1)

要通过POST请求发送JSON,您必须使用doPost方法阅读请求的正文。这是一种方法:

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();

然后你必须解析JSON。这可以使用Google gson来完成。

假设您有一个包含公共参数idtitle的类,这将是

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

当然除了gson之外还有其他解决方案来解析JSON,但你来解析它。

答案 1 :(得分:0)

我认为您将URL参数与请求正文混淆。要从请求中获取json字符串,您需要从request.getReader()读取它。

答案 2 :(得分:0)

我已经弄清楚了。

Json应该像这样发送:

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

而不是

xmlHttp.send(jsonObj);

为了接收它作为参数。