Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析

Posted

技术标签:

【中文标题】Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析【英文标题】:Ajax send JSON object with two arrays to a servlet and parsing in java servlet without jQuery 【发布时间】:2021-09-20 14:30:54 【问题描述】:

我必须向 servlet 发送两个数组,我使用发送 JSON 对象的 Ajax POST 调用,然后我必须读取在 java 中的 servlet 类中的两个列表或数组中发送的数据。 我不喜欢使用 jQuery 进行 Ajax 调用。 我对json不是很熟悉,我使用了***中的一些代码,我不明白发送或解析数据是否有问题。

这里是在javascript中进行Ajax调用的方法,其中cback是回调函数,method = "POST",url是servlet的url:

function makeCall(method, url, from, to, cback) 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() 
        cback(req)
    ; 
    req.open(method, url);
  
    var obj = ;
    obj["from"] = from;
    obj["to"] = to;
    var data = JSON.stringify(obj);
    req.send(data);
    

这里是 url 指定的 servlet 控制器中的 doPost 方法。这是我发现问题的地方:在执行 getParameter 之后,字符串 json1 和 json2 为空:

       
protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
            
       //...
            
       String json1 = request.getParameter("from");
       String json2 = request.getParameter("to");

       Gson gson = new Gson();
       ArrayList<Double> listFrom = gson.fromJson(json1,
                new TypeToken<ArrayList<Categoria>>() .getType());

       ArrayList<Double> listTo = gson.fromJson(json2,
                new TypeToken<ArrayList<Double>>() .getType());
                
      //...

【问题讨论】:

【参考方案1】:

您的 ajax 正在发送 JSON,但您的 serverlet 期待表单数据,其中包含 JSON。 要像您的服务器期望的那样发送数据,请将每个数组编码为 JSON 并将它们作为表单数据发送

function makeCall(method, url, from, to, cback) 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() 
        cback(req)
    ; 
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.open(method, url);
  
    var params = new URLSearchParams(to: JSON.stringify(to), from: JSON.stringify(from));
    req.send(params.toString());            

【讨论】:

以上是关于Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析的主要内容,如果未能解决你的问题,请参考以下文章

ajax传递json数组对象

通过 jQuery Ajax 发送 Json 数组

如何从ajax将多个json数组传递给控制器​​?

如何使用 json 序列化将带有其他变量的对象发送回客户端?

ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据

ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据