当前位置: 首页 > 面试题库 >

Struts2 + Json项的序列化

严阳夏
2023-03-14
问题内容

我有以下课程:

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中使用(其中需要两个字符),因为要对字符串进行正确的转义。



 类似资料:
  • 我有一个pojo类,例如: A类Pojo: 现在,在从spring REST API返回field3时,我希望将其转换为 输入:字段3-312548 输出字段3-“312548” 为此,我编写了自定义类JsonSerializer: 自定义JsonSerializer: 如果我使用这个注释,它会在内部操作时转换它,从而导致已经编写的基于整数的逻辑失败。因此,我想以这样一种方式配置它,对于所有内部操

  • 我有以下ORM对象(简化): 每行有: 主键 插入行时的时间戳 computed_values要存储的实际JSONB数据 JSONB来存储计算数据的日期列表。 虽然我对列没有问题,但是对象不能被SQLAlchemy JSON序列化程序序列化。 我的想法是为该列重新定义对象的序列化程序行为。要做到这一点,我必须定义自己的自定义JSON序列化程序,或者使用一些现成的序列化程序,比如orjson。因为我

  • 问题内容: 我在Web API项目中使用了Dictionary,该项目的序列化方式类似于JSON: 因为我有重复的键,所以我不能再使用Dictionary类型,而现在我正在使用 但这是以这种方式序列化的: 有没有办法像字典一样进行序列化? 谢谢。 问题答案: 如果您使用Newtonsoft Json.NET库,则可以执行以下操作。 定义一个转换器,以所需的方式写入键/值对的列表: 然后使用转换器:

  • 问题内容: 我正在尝试反序列化(使用gson)如下所示的JSON对象: 我该如何处理?我什至不知道该怎么称呼- 这里代表了多个“项目”,但这不是一个数组。当我尝试将其反序列化为数组时,程序在“预期的Begin_Array但找到Begin_Object”异常时崩溃。当我尝试将其反序列化为Strong对象时(请参见下面的类),程序将运行,但所有字段均返回null。 这是我尝试将其映射到的类: 完整的J

  • 问题内容: Android是否有任何简单的示例在序列化中使用JSON? 谢谢 问题答案: 我们使用gson库。序列化就像调用一样简单 对于反序列化,

  • 问题内容: 我正在尝试将本地对象序列化为json,但msdn文档似乎总是让我感到困惑。我相信我应该使用DataContractJsonSerializer,但不能完全确定,因为我看到了混合的响应。我也有人推荐Newtonsoft。 有没有人有任何经验可以指引我正确的方向? 问题答案: 您可以使用JavaScriptSerializer。 http://msdn.microsoft.com/zh-