Java Struts2+;项目的Json序列化

Java Struts2+;项目的Json序列化,java,json,hibernate,jakarta-ee,struts2,Java,Json,Hibernate,Jakarta Ee,Struts2,我有以下课程: 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 St

我有以下课程:

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
}
它返回所有子类的可序列化学生对象,但我希望只返回学生对象而不返回哈希集。 如何告诉Struts只序列化对象?
我确实启用了延迟加载,hashset作为代理类返回。

请参阅此处的答案,其中显示了include和exclude属性的使用。我不认为这个示例清楚地显示了排除嵌套对象,但是我已经将其用于此目的。如果你仍然有问题,我会发布一个正则表达式来证明这一点

编辑: 以下是在注释中使用排除属性阻止嵌套成员序列化的示例:

@ParentPackage("json-default")
@Result(type = "json", params = {
        "excludeProperties",
        "^inventoryHistory\\[\\d+\\]\\.intrnmst, selectedTransactionNames, transactionNames"
    })
public class InventoryHistoryAction extends ActionSupport {
...
inventoryHistory的类型为inventoryHistory a JPA实体对象,intrnmst引用另一个表,但由于延迟加载,如果将其序列化,则在将操作序列化为JSON时会导致异常。为此,添加了exclude参数以防止此情况发生

注意

\\ 
是每个\字符所必需的,因此在需要两个\的xml中只使用一个\,因为要正确解析字符串,必须进行转义

    @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}]
    }
{"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
    }]
}

哦,天啊,对不起,我记得我解决了一些类似的问题,但没有检查是否是同一个操作。我将发布一个类似的exclude regex注释样式来弥补它。查看您的操作,您是否尝试了以下排除属性“student.enroll”这假设您有一个getEnroll。您知道如何在struts.xml中实现这一点吗。因为我没有在我的项目中使用注释。
{"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
    }]
}