使用Jackson 2.5+时,JsonSerializer
方法必须通过返回的包裹JsonSerializer
覆盖:
BeanSerializerModifier.modifySerializer(SerializationConfig sc, BeanDescription bd, JsonSerializer<?> js)
我绝对会覆盖serialize(...)
,因为我会根据其覆盖中属性的值过滤掉某些对象的序列化。否则,如果对象未被其属性值过滤掉,我通过调用js.serialize(...)
来正常序列化,其中js
是作为参数传递给JsonSerializer
的{{1}} modifySerializer
1}}。
但我不确定是否还应该覆盖以下任何其他JsonSerializer
方法:
getDelegatee()
replaceDelegatee(...)
isUnwrappingSerializer()
unwrappingSerializer(...)
handledType()
usesObjectId()
isEmpty(T)
isEmpty(SerializerProvider, T)
acceptJsonFormatVisitor(...)
serializeWithType(...)
例如,getDelegatee()
应该返回js
吗?
为什么我要允许replaceDelegatee(...)
替换js
作为代理人?如果我应该允许这样做,那么我必须将js
保存到字段中,以便我可以替换它。
答案 0 :(得分:1)
根据我的另一个答案,你确实想要(重新)定义一些,而不是其他。 (1),(8),(9)和(10)确实有意义; (7)已弃用,不再需要。 (5)应该由基类定义(至少如果扩展StdSerailizer
),如果没有定义,应该主要定义,因为它被一些错误报告使用。
(3)和(4)是您可能希望支持的内容,如果您希望为该类型实现@JsonUnwrapped
。如果您委托标准POJO序列化器,这可能是真的。如果未实现,@JsonUnwrapped
对自定义序列化程序的属性基本不起作用。
(6)同样适用于@JsonIdentityInfo
;但请注意,使用委托模型处理对象标识可能很棘手。
至于代理人的替代......我不担心那个。我认为它是以推测方式添加的,实际上并没有被框架使用。