dan*_*nik 4 java json hibernate struts2 java-ee
我有以下课程:
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
}
Run Code Online (Sandbox Code Playgroud)
我有Struts2控制器,我想只返回Class Student的Serialized实例.
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
它返回带有所有子类的可序列化学生对象,但我想只返回没有返回hashset的student对象.如何告诉Struts仅序列化对象?我确实启用了延迟加载,并将hashset作为代理类返回.
请参阅此处的答案,其中显示了include和exclude属性的使用.我不认为该示例清楚地显示了排除嵌套对象,但我已将其用于此目的.如果你还有问题,我会发布一个正则表达式来证明这一点.
编辑:以下是在注释中使用排除属性的示例,该注释阻止嵌套成员的序列化:
@ParentPackage("json-default")
@Result(type = "json", params = {
"excludeProperties",
"^inventoryHistory\\[\\d+\\]\\.intrnmst, selectedTransactionNames, transactionNames"
})
public class InventoryHistoryAction extends ActionSupport {
...
Run Code Online (Sandbox Code Playgroud)
inventoryHistory属于InventoryHistory类型的JPA实体对象,intrnmst引用另一个表,但由于它是序列化的延迟加载,因此在操作为JSON序列化时会导致异常,因此添加了exclude参数以防止这种情况.
注意
\\
Run Code Online (Sandbox Code Playgroud)
每个\字符都是必需的,因此只能在xml中使用单个\,因为要转义正确解析的字符串,因此只需要两个\.
| 归档时间: |
|
| 查看次数: |
5792 次 |
| 最近记录: |