Jackson 2.5+:必须通过包装从 BeanSerializerModifier.modifySerializer(...) 返回的 JsonSerializer 来覆盖哪些 JsonSerializer 方法?
Jackson 2.5+: what JsonSerializer methods must be overridden by wrapping JsonSerializer returned from BeanSerializerModifier.modifySerializer(...)?
使用 Jackson 2.5+,哪些 JsonSerializer
方法必须被包装覆盖 JsonSerializer
returned from:
BeanSerializerModifier.modifySerializer(SerializationConfig sc, BeanDescription bd, JsonSerializer<?> js)
我肯定会重写 serialize(...)
,因为我正在根据重写中的属性值过滤掉一些对象,使其不被序列化。否则,如果对象没有被其 属性 值过滤掉,我通常通过调用 js.serialize(...)
进行序列化,其中 js
是作为参数传递给modifySerializer
.
但我不确定是否还应该覆盖以下任何其他 JsonSerializer
方法:
getDelegatee()
replaceDelegatee(...)
isUnwrappingSerializer()
unwrappingSerializer(...)
handledType()
usesObjectId()
isEmpty(T)
isEmpty(SerializerProvider, T)
acceptJsonFormatVisitor(...)
serializeWithType(...)
例如,应该 getDelegatee()
return js
?
为什么我要让 replaceDelegatee(...)
取代 js
作为受托人?如果我允许这样做,那么我必须将 js
保存到一个字段以便我可以替换它。
根据我的其他回答,有些您确实想要(重新)定义,有些则不需要。 (1)、(8)、(9)、(10)确实有道理; (7) 已弃用,不再需要。 (5) 应该由 base class 定义(至少如果扩展 StdSerailizer
),如果没有定义,应该主要定义,因为它被一些错误报告使用。
(3) 和 (4) 是您可能想要支持的东西,如果您希望为该类型实现 @JsonUnwrapped
。如果您要委托给标准的 POJO 序列化程序,这可能是正确的。如果未实现,@JsonUnwrapped
基本上不会影响自定义序列化程序的属性。
(6) 同样适用于 @JsonIdentityInfo
;但请注意,使用委托模型处理对象标识可能很棘手。
至于代理人更换...我不担心那个。我认为它是推测性添加的,并没有被框架实际使用。
使用 Jackson 2.5+,哪些 JsonSerializer
方法必须被包装覆盖 JsonSerializer
returned from:
BeanSerializerModifier.modifySerializer(SerializationConfig sc, BeanDescription bd, JsonSerializer<?> js)
我肯定会重写 serialize(...)
,因为我正在根据重写中的属性值过滤掉一些对象,使其不被序列化。否则,如果对象没有被其 属性 值过滤掉,我通常通过调用 js.serialize(...)
进行序列化,其中 js
是作为参数传递给modifySerializer
.
但我不确定是否还应该覆盖以下任何其他 JsonSerializer
方法:
getDelegatee()
replaceDelegatee(...)
isUnwrappingSerializer()
unwrappingSerializer(...)
handledType()
usesObjectId()
isEmpty(T)
isEmpty(SerializerProvider, T)
acceptJsonFormatVisitor(...)
serializeWithType(...)
例如,应该 getDelegatee()
return js
?
为什么我要让 replaceDelegatee(...)
取代 js
作为受托人?如果我允许这样做,那么我必须将 js
保存到一个字段以便我可以替换它。
根据我的其他回答,有些您确实想要(重新)定义,有些则不需要。 (1)、(8)、(9)、(10)确实有道理; (7) 已弃用,不再需要。 (5) 应该由 base class 定义(至少如果扩展 StdSerailizer
),如果没有定义,应该主要定义,因为它被一些错误报告使用。
(3) 和 (4) 是您可能想要支持的东西,如果您希望为该类型实现 @JsonUnwrapped
。如果您要委托给标准的 POJO 序列化程序,这可能是正确的。如果未实现,@JsonUnwrapped
基本上不会影响自定义序列化程序的属性。
(6) 同样适用于 @JsonIdentityInfo
;但请注意,使用委托模型处理对象标识可能很棘手。
至于代理人更换...我不担心那个。我认为它是推测性添加的,并没有被框架实际使用。