我发现了很多如何正确序列化日期的建议,但没有任何建议适用于下一种情况:
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/