Javascript 尝试从对Java的AJAX调用解析JSON对象时出现异常

Javascript 尝试从对Java的AJAX调用解析JSON对象时出现异常,javascript,ajax,json,struts2,Javascript,Ajax,Json,Struts2,** 更新代码 ** 我的Javascript/Ajax代码: $(function() { $("#create_obd").bind("click", function(event) { var soNumber = []; $('#sales_order_lineItems input[type=checkbox]:checked').each(function(index) { var

**

更新代码

**

我的Javascript/Ajax代码:

$(function() {
        $("#create_obd").bind("click", function(event) {

            var soNumber = [];

             $('#sales_order_lineItems input[type=checkbox]:checked').each(function(index) { 

               var row = $(this).parent().parent();
               var rowcells = row.find('td');

                var soRowData = {
                       so_number:rowcells[1].innerText
                    };
               soNumber.push(soRowData);

             }); //loop ends

            var soNumbers = JSON.stringify(soNumber);
            alert(soNumbers);
             $.ajax({
                    type: "POST",
                    url: server_ip_address + "/createobdaction",
                    data: soNumbers,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(data){alert(data);},
                    failure: function(errMsg) {
                        alert(errMsg);
                    }
                });
            });
    });
package com.app.action;

import java.util.List;

import com.app.bean.SONumber;

public class CreateOBDAction {

private List<SONumber> soNumbers;

public String createOBD() {
    System.out.println(soNumbers.size());
    return "jsonCreateOBDSuccess";
}

public List<SONumber> getSoNumbers() {
    System.out.println("Getter................");
    return soNumbers;
}

public void setSoNumbers(List<SONumber> soNumbers) {
    System.out.println("Setter............");
    this.soNumbers = soNumbers;
}

}
我的Java代码:

$(function() {
        $("#create_obd").bind("click", function(event) {

            var soNumber = [];

             $('#sales_order_lineItems input[type=checkbox]:checked').each(function(index) { 

               var row = $(this).parent().parent();
               var rowcells = row.find('td');

                var soRowData = {
                       so_number:rowcells[1].innerText
                    };
               soNumber.push(soRowData);

             }); //loop ends

            var soNumbers = JSON.stringify(soNumber);
            alert(soNumbers);
             $.ajax({
                    type: "POST",
                    url: server_ip_address + "/createobdaction",
                    data: soNumbers,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(data){alert(data);},
                    failure: function(errMsg) {
                        alert(errMsg);
                    }
                });
            });
    });
package com.app.action;

import java.util.List;

import com.app.bean.SONumber;

public class CreateOBDAction {

private List<SONumber> soNumbers;

public String createOBD() {
    System.out.println(soNumbers.size());
    return "jsonCreateOBDSuccess";
}

public List<SONumber> getSoNumbers() {
    System.out.println("Getter................");
    return soNumbers;
}

public void setSoNumbers(List<SONumber> soNumbers) {
    System.out.println("Setter............");
    this.soNumbers = soNumbers;
}

}
Struts.xml

<action name="createobdaction" class="com.app.action.CreateOBDAction" 
      method="createOBD">
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="json">
        <param name="enableSMD">true</param>
    </interceptor-ref>       
    <result name="jsonCreateOBDSuccess" type="json" />
</action>

符合事实的
例外情况

15:32:00092错误JSONInterceptor:34-无法反序列化JSON 来自请求的对象15:32:00093调试调度程序:80-异常 处理请求期间发生:无法反序列化JSON对象 从请求org.apache.struts2.json.JSONException:无法 在请求中反序列化JSON对象 org.apache.struts2.json.JSONInterceptor.intercept(JSONInterceptor.java:117)

  • 在你的项目中包含这些信息
  • 为来自页面的JSONized对象的每个字段创建属性、getter和setter
  • 将JSON拦截器添加到操作使用的拦截器堆栈中
  • 就这样
从文档中:

如果使用了拦截器,将根据请求中的JSON内容填充操作,拦截器的规则如下:

  • “内容类型”必须是“application/json”
  • JSON内容必须是 格式良好,语法请参见json.org
  • 行动必须有公众参与 必须填充的字段的“setter”方法
  • 支持的类型 人口是:原语(int,long…String),日期,列表,映射, 基元数组、其他类(稍后将对此进行详细介绍)和其他类的数组 班级
  • JSON中要在列表中填充的任何对象,或 map,将是map类型(从属性映射到值),任何 整数的类型为Long,任何十进制数的类型为Long Double和类型列表的任何数组

  • 谢谢安德里亚的回复。你能帮我更好地理解这一点吗。事实上,我对这一点非常陌生,因此,可能会问一些非常基本的问题。我已经在我的动作课上包括了这三个。导入org.json.JSONArray;导入org.json.JSONException;导入org.json.JSONObject;插件还需要什么?在我的Action类中还包括getter/setter。更新了上面的代码。尝试将SONumber类设置为标准类,而不是内部类。现在InstantiationException@minchi尝试将数据:soNumbers更改为数据:{“soNumbers”:soNumbers},。