使用Struts2 Json插件时出现Json序列化问题

使用Struts2 Json插件时出现Json序列化问题,json,serialization,struts2,struts2-json-plugin,Json,Serialization,Struts2,Struts2 Json Plugin,我有一个具有3个属性的action类。我正在使用Struts2 Json插件来序列化action类。我能够按照我的期望序列化字符串selectedCompany 问题 PeopleArrayList属性用空值序列化。我似乎找不到我犯了什么错误 Json_响应: 动作类: package json; import java.util.ArrayList; import com.google.gson.Gson; import com.opensymphony.xwork2.ActionSup

我有一个具有3个属性的action类。我正在使用Struts2 Json插件来序列化action类。我能够按照我的期望序列化字符串selectedCompany

问题

People
ArrayList
属性用空值序列化。我似乎找不到我犯了什么错误

Json_响应:

动作类:

package json;

import java.util.ArrayList;

import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

import dao.DataAccess;

public class Json extends ActionSupport implements Preparable {

    private static final long serialVersionUID = -8415223624346993447L;
    private ArrayList<String> list; 
    private String selectedCompany = "Buhin Engineers";
    private ArrayList<Person> people;

    public ArrayList<String> getList() {
        return list;
    }
    public void setList(ArrayList<String> list) {
        this.list = list;
    }
    public String getSelectedCompany() {
        return selectedCompany;
    }
    public void setSelectedCompany(String selectedCompany) {
        this.selectedCompany = selectedCompany;
    }
    public ArrayList<Person> getPeople() {
        return people;
    }
    public void setPeople(ArrayList<Person> people) {
        this.people = people;
    }
    public String execute(){
        list = new ArrayList<String>();
        list.add("Yamaha");
        list.add("Hero Honda");
        return SUCCESS;
    }
    @Override
    public void prepare() throws Exception {
        // TODO Auto-generated method stub
        populatePeople();
    }
    private void populatePeople() {
        // TODO Auto-generated method stub
        DataAccess da = new DataAccess();
        setPeople(da.retrievePeople());

    }
}
包json;
导入java.util.ArrayList;
导入com.google.gson.gson;
导入com.opensymphony.xwork2.ActionSupport;
导入com.opensymphony.xwork2.Preparable;
导入dao.DataAccess;
公共类Json扩展ActionSupport实现了Preparable{
私有静态最终长serialVersionUID=-8415223624346993447L;
私有数组列表;
私有字符串selectedCompany=“Buhin Engineers”;
私人ArrayList人;
公共ArrayList getList(){
退货清单;
}
公共无效集合列表(ArrayList列表){
this.list=列表;
}
公共字符串getSelectedCompany(){
返回所选公司;
}
公共无效集合selectedCompany(字符串selectedCompany){
this.selectedCompany=selectedCompany;
}
公共数组列表getPeople(){
还人,;
}
公共人员(ArrayList人员){
这个。人=人;
}
公共字符串execute(){
列表=新的ArrayList();
列表。添加(“雅马哈”);
添加(“英雄本田”);
回归成功;
}
@凌驾
public void prepare()引发异常{
//TODO自动生成的方法存根
populatePeople();
}
私有void populatePeople(){
//TODO自动生成的方法存根
DataAccess da=新的DataAccess();
setPeople(da.retrievePeople());
}
}
struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
    <struts>
        <constant name="struts.devMode" value="true" />
        <package name="default" namespace="/" extends="json-default">
            <action name="Json" class="json.Json">
                <result type="json">
                    <param name="includeProperties">selectedCompany,people,list</param>
                </result>
            </action>
        </package>
    </struts>

所选公司、人员、列表

列表作为数组发布,因此您需要定义要包含的数组。像

people\[\d+\]\..*,list\[\d+\]\..* 
如果
列表
是对象的类型(而不是简单的
字符串
),则可以将结果缩小到选定的属性,如:

employee\[\d+\]\.lName,employee\[\d+\]\.fName,
如果
列表
对象具有内部对象,则可以执行以下操作:

//The employee\[\d+\]\.address.addressline1 is not enough !!
//May be one can suggest better idea here :)
employee\[\d+\]\.address,employee\[\d+\]\.address.addressline1
可能重复的