我有以下课程:
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控制器,我只想返回Class Student的序列化实例。
@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; } }
它返回了带有所有子类的可序列化的学生对象,但是我只希望有一个学生对象而没有返回hashset。如何告诉Struts仅序列化对象?我确实启用了延迟加载,并且将哈希集作为代理类返回。
请参见此处的答案,其中显示了包含和排除属性的使用。我不认为该示例明确显示排除嵌套对象,但是我已将其用于此目的。如果仍然有问题,我将发布一个正则表达式来证明这一点。
编辑 :这是在注释中使用排除属性的示例,该注释会阻止嵌套成员的序列化:
@ParentPackage("json-default") @Result(type = "json", params = { "excludeProperties", "^inventoryHistory\\[\\d+\\]\\.intrnmst, selectedTransactionNames, transactionNames" }) public class InventoryHistoryAction extends ActionSupport { ...
库存历史记录是JPA实体对象的库存历史记录类型,intrnmst引用另一个表,但是由于延迟加载(如果已序列化),则在对操作进行JSON序列化时会导致Exception,因此已添加了exclude参数以防止这种情况。
注意
\\
每个\字符都需要,因此单个\只会在xml中使用(其中需要两个字符),因为要对字符串进行正确的转义。