我想要的是对类的对象有条件地使用默认BeanSerializer:
class MyCustomSerializer extends StdSerializer<AbstractEntity> {
public MyCustomSerializer() {
super(AbstractEntity.class);
}
@Override
public void serialize(AbstractEntity o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (someCondition()) {
serializeNormalWay(); //how?
} else {
//custom serialization
}
}
}
我试图做这样的事情:
serializerProvider.defaultSerializeValue(o, jsonGenerator);
但这调用了MyCustomSerializer的方法,而且我永无止境地递归。如何获得可以用于普通bean序列化的适当的Serializer对象?
这需要更复杂的设置:您需要让Jackson创建一个,然后接管,而不是直接覆盖要使用的序列化器。这可以通过注册BeanSerializerModifier
(via
Module
)方法来完成modifySerializer(...)
。将为您提供将要使用的默认序列化程序,并且您可以构造自定义序列号,并传递该默认序列号。
我想要的是有条件地为类的对象使用默认BeanSerializer: 我曾经尝试过做这样的事情: 但是这调用MyCustomSerializer的方法,我有永无止境的递归。我怎么能得到适当的序列化对象,我可以用普通bean序列化?
问题内容: 我需要设置班级日期序列化的格式。我有Jackson的版本,没有@JsonFormat。这就是为什么我编写自定义类的原因: } 并使用它: 但是,我还有另一个具有不同日期格式的字段,并且我不想创建用于序列化的其他类。我可以将所有需要的格式(例如常量)添加到CDJsonDateSerializer类中,并通过注释设置所需的格式吗?像这样: 。 下面的答案后: 经过一些更正后,它可以工作。我
问题内容: 我想创建一个自定义的序列化程序,该工作量很小,然后将其余的保留给默认序列化。 例如: 通过为聚合对象创建其他自定义序列化程序的想法,这些对象的行为基于“特殊”属性值而有所不同。但是,上面的代码不起作用,因为毫无疑问,它进行了无限递归。 设置属性后,是否可以告诉杰克逊使用默认序列化?我真的不希望像许多自定义序列化程序那样枚举所有属性,因为该类相当复杂,并且我不想每次更改类时都必须对序列化
问题内容: 我可以有条件地使用@JsonUnwrapped吗?我不想在序列化过程中使用它,但想在反序列化对象时使用它。 一种实现方法是创建两个不同的类或创建一个子类,该子类仅覆盖需要在序列化和反序列化时表现不同的属性。这听起来不对。还有其他替代方法或Jackson的解决方法吗? 问题答案: 您可以使用MixIn功能。使用此要素类与注释分离。您可以使用在运行时中添加必要的注释。请参见以下示例: 上面
问题内容: 我有以下课程- 我正在使用objectMapper.valueToTree(sections)将其转换为JsonNode。但是,当我打印相同的内容时,我仅从Entity类中看到id和name字段,而从Images列表中看不到任何内容。我是否需要添加任何种类的特殊逻辑或注释以确保同时打印列表。 以下是主要课程- 问题答案: 您需要为Entity#images添加getter和setter
有没有办法让Jackson序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。