项目

2011-01-25 62 views
4

我有以下类的Struts2 + JSON序列:项目

public class Student { 
    private Long id ; 
    private String firstName; 
    private String lastName; 
private Set<Enrollment> enroll = new HashSet<Enrollment>(); 
//Setters and getters 
} 

public class Enrollment { 
    private Student student; 
    private Course course; 
    Long enrollId; 

//Setters and Getters 
} 

我有Struts2的控制器和我想只返回类学生的序列化实例。

@ParentPackage("json-default") 
public class JsonAction extends ActionSupport{ 

private Student student; 

@Autowired 
DbService dbService; 

public String populate(){ 
    return "populate"; 
} 

@Action(value="/getJson", results = { 
     @Result(name="success", type="json")}) 
public String test(){ 
    student = dbService.getSudent(new Long(1)); 
    return "success"; 
} 

@JSON(name="student") 
public Student getStudent() { 
    return student; 
} 
public void setStudent(Student student) { 
    this.student = student; 
} 

} 

它返回可序列化的学生对象与所有子类,但我想只有学生对象没有返回的哈希集。 如何告诉Struts只序列化对象? 我确实已启用延迟加载,并将hashset作为代理类返回。

回答

7

看到这里的答案,显示了使用包括和排除属性。我不认为这个例子清楚地显示了排除嵌套对象,但是我已经将它用于此目的。如果你仍然有问题,我会发布一个正则表达式来证明这一点。

Problem with Json plugin in Struts 2

编辑: 下面是使用排除注释中的哪些块嵌套成员的序列化特性的一个示例:

@ParentPackage("json-default") 
@Result(type = "json", params = { 
     "excludeProperties", 
     "^inventoryHistory\\[\\d+\\]\\.intrnmst, selectedTransactionNames, transactionNames" 
    }) 
public class InventoryHistoryAction extends ActionSupport { 
... 

inventoryHistory是类型的InventoryHistory JPA实体对象,intrnmst引用另一个表,但因为延迟加载(如果它被序列化),当操作是JSON序列化时,会导致异常,因此添加了exclude参数以防止此情况。

注意

\\ 

需要对每个\字符,所以单\只会在需要因为逃逸的字符串的两个XML可以用来解析权。

+0

是的:)这是我的文章,但它不会解决任何问题。 – 2011-01-26 11:18:25

2
@Controller 
    @Results({ 
     @Result(name="json",type="json" 
       , params={"root","outDataMap","excludeNullProperties","true" 
         ,"excludeProperties","^ret\\[\\d+\\]\\.city\\.province,^ret\\[\\d+\\]\\.enterprise\\.userinfos","enableGZIP","true" 
       }) 
    }) 
    public class UserinfoAction extends BaseAction { 
       @Action(value="login") 

     public String login(){ 
      if(jsonQueryParam!=null && jsonQueryParam.length()>0) 
      { 
       user = JsonMapper.fromJson(jsonQueryParam, TUserinfo.class); 
      } 
      Assert.notNull(user); 
      //RESULT="ret" addOutJsonData: put List<TUserinfo> into outDataMap with key RESULT for struts2 JSONResult 
      addOutJsonData(RESULT, service.login(user)); 
      return JSON; 
     } 



public class TUserinfo implements java.io.Serializable { 
    private static final long serialVersionUID = 1L; 
    private String userid; 
    private String username; 
    private String userpwd; 
    private TEnterpriseinfo enterprise; 
    private String telphone; 
    private TCity city; 
...... 
} 

public class TEnterpriseinfo implements java.io.Serializable { 
    private String enterpriseid; 
    private String enterprisename; 
    private Set<TUserinfo> userinfos = new HashSet<TUserinfo>(0); 
.......} 

之前设置excludeProperties属性,结果如下:

{"ret":[ 
    { 
    "city":{"cityename":"tianjin","cityid":"12","cityname":"天津" 
      ,"province": {"provinceename":"tianjing","provinceid":"02","provincename":"天津"} 
     } 
    ,"createddate":"2014-01-07T11:13:58" 
    ,"enterprise":{"createddate":"2014-01-07T08:38:00","enterpriseid":"402880a5436a227501436a2277140000","enterprisename":"测试企业2","enterprisestate":0 
       ,"userinfos":[null,{"city":{"cityename":"beijing","cityid":"11","cityname":"北京","province":{"provinceename":"beijing","provinceid":"01","provincename":"北京市"} 
    },"comments":"ceshi","createddate":"2004-05-07T21:23:44","enterprise":null,"lastlogindate":"2014-01-08T08:50:34","logincount":11,"telphone":"2","userid":"402880a5436a215101436a2156e10000","username":"0.5833032879881197","userpwd":"12","userstate":1,"usertype":0}] 
     } 
,"lastlogindate":"2014-01-08T10:32:43","logincount":0,"telphone":"2","userid":"402880a5436ab13701436ab1b74a0000","username":"testUser","userpwd":"333","userstate":1,"usertype":0}] 
    } 

后设置excludeProperties属性,也有不存在省和userinfos节点,结果如下:

{"ret": 
    [{ 
    "city":{"cityename":"tianjin","cityid":"12","cityname":"天津"} 
    ,"createddate":"2014-01-07T11:13:58" 
    ,"enterprise":{"createddate":"2014-01-07T08:38:00","enterpriseid":"402880a5436a227501436a2277140000","enterprisename":"测试企业2","enterprisestate":0} 
    ,"lastlogindate":"2014-01-08T11:05:32","logincount":0,"telphone":"2","userid":"402880a5436ab13701436ab1b74a0000","username":"testUser","userpwd":"333","userstate":1,"usertype":0 
    }] 
}