2015-05-26 5 views
2

У меня есть класс действия с 3 свойствами. Я использую плагин Struts2-Json для сериализации класса действия. Я могу сериализовать Струнный selectedCompany согласно моим ожиданиямПроблема с сериализацией Json при использовании плагина Struts2-Json

Проблемы

The ЛюдейArrayList<Person> свойства сериализовать с пустыми значениями. Кажется, я не нашел, где я ошибся.

Json_Response:

enter image description here

Класс действия:

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

    } 
} 

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> 
+3

возможно дубликат [Распорки 2 JSON-бобов синтаксического анализа] (http://stackoverflow.com/q/17852550/1700321) –

ответ

2

List публикуются как массивы, поэтому вам нужно определить массив, который будет включен. как

people\[\d+\]\..*,list\[\d+\]\..* 

Если List типа объектов (вместо простой String) вы можете сузить результат выбранных свойств, такие как:

employee\[\d+\]\.lName,employee\[\d+\]\.fName, 

Если List объектов имеют внутренние объекты, которые вы можете сделать, как :

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

И с аннотациями: http://stackoverflow.com/a/21984750/1654265 –