有没有替代Jackson @JsonTypeInfo注释的方法?

4

朋友们,

Jackson框架提供了基于注解的方法,在序列化过程中发出类型信息。

我不想在任何一个类中使用@JsonTypeInfo注解。

是否有任何替代上述注解的方法。

如果是,请尽可能提供示例来说明如何进行。

2个回答

3

覆盖JacksonAnnotationIntrospector并使用您的Introspector在ObjectMapper中使用setAnnotationIntrospector。这里是您的AnnotationIntrospector的代码片段:

@Override
public TypeResolverBuilder<?> findTypeResolver(MapperConfig<?> config,
        AnnotatedClass ac, JavaType baseType) {
    if (Modifier.isAbstract(baseType.getRawClass().getModifiers())){
        StdTypeResolverBuilder typeResolverBuilder = new StdTypeResolverBuilder();
        typeResolverBuilder.typeProperty("@class");
        typeResolverBuilder.inclusion(As.PROPERTY);
        typeResolverBuilder.init(Id.CLASS, null);
        return typeResolverBuilder;
    }
    return super.findTypeResolver(config, ac, baseType);
}

在执行typeResolverBuilder.typeProperty("@class"); typeResolverBuilder.inclusion(As.PROPERTY);之前,应该先执行typeResolverBuilder.init(Id.CLASS, null);,否则它将无法正常工作。 - Niraj Nawanit
这会打印出集合类型的奇怪格式,所以我用 baseType.isAbstract() 替换了 Modifier.isAbstract(baseType.getRawClass().getModifiers()),它确实完成了任务。谢谢! - A. Rodas

2

以下是几种替代方案:

  • 使用混合注释,不需要修改值类
  • 覆盖JacksonAnnotationIntrospector并实现自己的逻辑来确定何时以及如何使用等效类型信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接