jackson-module-jsonSchema icon indicating copy to clipboard operation
jackson-module-jsonSchema copied to clipboard

[Feature] Support for `definitions`

Open rrmistry opened this issue 5 years ago • 2 comments

Problem I am trying to solve:

Given Java Objects:

@JsonSubTypes({
    @JsonSubTypes.Type(value = A.class),
    @JsonSubTypes.Type(value = B.class)
})
public interface I {}

public class A implements I {
    public int varA;
}
public class B implements I {
    public int varB;
}
public class C {
    public I varC;
}

I desire a json schema as follows:

{
  "definitions": {
    "urn:jsonschema:com:mycompany:GenerateSchemas:A": {
        "type" : "object",
        "id" : "urn:jsonschema:com:mycompany:GenerateSchemas:A",
        "properties" : {
          "varA" : {
            "type" : "integer"
          }
        }
      },
    "urn:jsonschema:com:mycompany:GenerateSchemas:B": {
        "type" : "object",
        "id" : "urn:jsonschema:com:mycompany:GenerateSchemas:B",
        "properties" : {
          "varB" : {
            "type" : "integer"
          }
        }
      }
  },
  "type" : "object",
  "id" : "urn:jsonschema:com:mycompany:GenerateSchemas:C",
  "properties" : {
    "varC" : {
      "type" : "object",
      "oneOf": [
        { "$ref": "urn:jsonschema:com:mycompany:GenerateSchemas:A" },
        { "$ref": "urn:jsonschema:com:mycompany:GenerateSchemas:B" }
      ]
    }
  }
}

Using version 2.9.8 of the library, the schema that is generated is:

{
  "type" : "object",
  "id" : "urn:jsonschema:com:mycompany:GenerateSchemas:C",
  "properties" : {
    "varC" : {
      "type" : "any"
    }
  }
}

It would be nice if it was possible to natively support this given that @JsonSubType annotations are present.

Please see related to StackOverflow Question: https://stackoverflow.com/questions/56174997/json-schema-generator-with-inheritance-and-references My workaround: https://gist.github.com/rrmistry/2246c959d1c9cc45894ecf55305c61fd (Could be improved if approved)

Thank you,

rrmistry avatar May 21 '19 21:05 rrmistry