【问题标题】:Is it possible to ignore @JsonSerialize annotation?是否可以忽略 @JsonSerialize 注释?
【发布时间】:2016-08-10 17:46:57
【问题描述】:

是否可以使用 Jackson 序列化对象,但忽略使用注释 @JsonSerialize(using = MyCustomSerializer.class) 注册的自定义序列化程序?

理由: 我想使用 Jackson 将我的对象转换为 Map,使用 com.fasterxml.jackson.databind.ObjectMapper.convertValue(object,Map.class)。 目前它不起作用,因为我的类有自定义序列化器(@JsonSerialize)但错过了反序列化器。我需要自定义序列化器,我真的不需要也不想写反序列化器。

ObjectMapper.convertValue 使用我的序列化然后反序列化失败。

我希望 ObjectMapper 忽略 @JsonSerialize 并使用默认的序列化逻辑。杰克逊有可能吗?

【问题讨论】:

  • This 一个为我工作。希望这会有所帮助。

标签: java json serialization jackson


【解决方案1】:

这完全有可能。您可以在每个 ObjectMapper 的基础上禁用注释,如下所示:

ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.USE_ANNOTATIONS);

有关更多详细信息,请查看github 的文档或查看baeldung 的示例。

【讨论】:

  • 有没有其他方法可以作为这个解决方案禁用所有注释。
  • 这就像在老鼠身上使用大象镇静剂。在这种情况下,java.beans.ContructorProperties 之类的内容也会被忽略,这在某些情况下会导致此解决方案无法接受。
【解决方案2】:

您还可以使用 ignoreJsonTypeInfoIntrospector 禁用特定注释并为特定注释类返回 null;

看看最后一个github issue

public class IgnoreJsonUnwrappedAnnotationInspector extends JacksonAnnotationIntrospector {
  @Override
  public NameTransformer findUnwrappingNameTransformer(AnnotatedMember member) {
    return null;
  }
}

也可以在这里查看更多detailed example

另一种解决方案是为不同的场景创建更多的 ObjectMapper 实例。

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 2023-01-30
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多