java - Jersey/Jackson - 类对象序列化

标签 java json serialization jersey-2.0

我发现了很多如何正确序列化日期的建议,但没有任何建议适用于下一种情况:

public class CustomFilter {
    private String filterName;
    private List<Filter> filters;
    //getters and setters
}

public class Filter {
    private String propertyName;
    private String comparison;
    private Object value;
    //getters and setters
}

问题是 Filter 中的 value 属性可以是字符串、数字或日期。所以 CustomFilter 的实例已正确序列化/反序列化(在客户端和资源之间),但如果 Filter 值是 Date,则它表示为 long,如果它是基于 Joda 的 Date,则表示为元素的 LinkedHashMap(反序列化时)。如果有人知道如何处理这种情况(当对象属性是对象类型但可以是上述任何类型时) - 请发表评论

最佳答案

一种选择是创建一个包含三种类型之一的容器对象

public class ValueHolder {
    private Date date;
    private JodatDate jodaDate;
    private Number number;
    private String string;
    // getters and setters omitted
    // maybe add additional logic to ensure only one value is set.
}

那么您应该能够毫无问题地反序列化/序列化它。如果您想使用不带容器对象的自定义序列化器来执行此操作,则需要在 json 输出中写入对象的类型,并使用该信息在接收端对其进行反序列化。

关于java - Jersey/Jackson - 类对象序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438635/

相关文章:

java - GSON 堆栈溢出错误

java - 如何使用 Gson API 创建这个 JsonObject?

java - 将java复选框值插入sql

java - 在 JUnit 中生成 HmacSHA256 签名

asp.net-mvc - 如何在 MVC 3 中显示 JSON 图像?

c# - Json.net 反序列化字典包含具有 dataTable 值的字典

c# - 单次序列化/反序列化大对象与多次序列化/反序列化小对象?

java - 当我事先检查是否存在元素时,为什么会引发 NoSuchElement 异常?

java - 解决 N 个皇后的回溯问题

ios - 在 iOS 中解析 JSON 时遇到一些错误?