Java 如何将Jackson property discovery扩展到;“捕获所有类型”;路?
在我的关于序列化的讨论之后,我想进一步支持Java 如何将Jackson property discovery扩展到;“捕获所有类型”;路?,java,json,jackson,jsonschema,Java,Json,Jackson,Jsonschema,在我的关于序列化的讨论之后,我想进一步支持JsonFormatVisitor 我有同样的要求,就是: 我有几种类型的对象(接口) 我事先不知道这些目标的类型 我无法在这些类型上添加批注 我可以反省所有这些对象以获取它们的状态数据 既然序列化工作正常,我需要生成JsonSchema,然后执行如下操作: SchemaFactoryWrapper visitor = WHAT? mapper.acceptJsonFormatVisitor( mapper.constructType( Foo.clas
JsonFormatVisitor
我有同样的要求,就是:
SchemaFactoryWrapper visitor = WHAT?
mapper.acceptJsonFormatVisitor( mapper.constructType( Foo.class ), visitor );
JsonSchema jsonSchema = visitor.finalSchema();
String schemaString = mapper.writeValueAsString( jsonSchema );
我实现了一个SchemaFactoryWrapper
,调用了它的expectAnyFormat
,但我不知道在里面做什么。看起来“any”对象没有模式
也许我可以去杰克逊的其他地方?也许可以扩展整个Bean/属性内省机制来支持完全不同的模型(即不是Bean)
我有点迷路了,请帮我找到宝藏室:)我可以尝试提出一些可能有用的方法 首先,即使您不能直接对类进行注释,“混合注释”也会有所帮助——不过,这确实假设了静态知识 第二,由于模式生成使用用于序列化的类型检测,您可能需要注册自定义序列化程序;但这并不一定意味着必须全部手写。注册自定义序列化程序最灵活的方法是通过
Module
接口(mapper.registerModule(new MyModule());模块可以注册serializer
实例,该实例在首次尝试为某个类型定位JsonSerializer
时被调用(在此之后,实例将被缓存以用于相同类型的其他属性)。
在这里,您可以配置并返回自定义的JsonSerializer
;但它可能只需要处理与架构相关的回调(由架构生成器调用的回调)
还可以扩展/修改属性发现机制;这是否更容易取决于。但要寻找的是通过模块注册BeanSerializerModifier
。
它在构建BeanSerializer
的过程中被调用(除非注册了更具体的内容,否则将使用通用的POJO序列化程序),您可以使用它添加/修改属性;或者只需完全替换生成的序列化程序(如果需要,还可以使用默认序列化程序链接自定义序列化程序)