Struts2 + Json序列化项目

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作为代理类返回.

Qua*_*ion 7

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

Struts 2中的Json插件问题

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

@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中使用单个\,因为要转义正确解析的字符串,因此只需要两个\.