When using the Jackson JSON schema module instead of serializing the full graph, which I would like to stop when one of my model classes meets, and use the class name to insert $ ref for the other schema. Can you direct me to the right place in the jackson-module-jsonSchema source to start messing around?
Here is the code to illustrate the problem:
public static class Zoo { public String name; public List<Animal> animals; } public static class Animal { public String species; } public static void main(String[] args) throws Exception { SchemaFactoryWrapper visitor = new SchemaFactoryWrapper(); ObjectMapper mapper = objectMapperFactory.getMapper(); mapper.acceptJsonFormatVisitor(mapper.constructType(Zoo.class), visitor); JsonSchema jsonSchema = visitor.finalSchema(); System.out.println(mapper.writeValueAsString(jsonSchema)); }
Output:
{ "type" : "object", "properties" : { "animals" : { "type" : "array", "items" : { "type" : "object", "properties" : { <---- Animal schema is inlined :-( "species" : { "type" : "string" } } } }, "name" : { "type" : "string" } } }
DESIRED Output:
{ "type" : "object", "properties" : { "animals" : { "type" : "array", "items" : { "$ref" : "#Animal" <---- Reference to another schema :-) } }, "name" : { "type" : "string" } } }
source share