Java JSON Schema Generator
Creating JSON Schema (Draft 6, Draft 7 or Draft 2019-09) from your Java classes utilising Jackson.
This project consists of:
- the victools/jsonschema-generator (the only thing you need to get started)
- a few modules bundling standard configurations for your convenience:
- victools/jsonschema-module-jackson – deriving JSON Schema attributes from
jackson
annotations (e.g. "description", property name overrides, what properties to ignore) as well as looking up appropriate (annotated) subtypes - victools/jsonschema-module-javax-validation – deriving JSON Schema attributes from
javax.validation
annotations (e.g. which properties are nullable or not, their "minimum"/"maximum", "minItems"/"maxItems", "minLength"/"maxLength") - victools/jsonschema-module-swagger-1.5 – deriving JSON Schema attributes from
swagger
(1.5.x) annotations (e.g. "description", property name overrides, what properties to ignore, their "minimum"/"maximum", "const"/"enum") - victools/jsonschema-module-swagger-2 – deriving JSON Schema attributes from
swagger
(2.x)@Schema
annotations
- victools/jsonschema-module-jackson – deriving JSON Schema attributes from
- the victools/jsonschema-maven-plugin – allowing you to generate JSON Schemas as part of your Maven build
Another example for such a module is:
- imIfOu/jsonschema-module-addon – deriving JSON Schema attributes from a custom annotation with various parameters, which is part of the module.
Documentation
JavaDoc is being used throughout the codebase, offering contextual information in your respective IDE or being available online through services like javadoc.io.
Additional documentation can be found in the Project Wiki.
Usage
Dependency (Maven)
<dependency>
<groupId>com.github.victools</groupId>
<artifactId>jsonschema-generator</artifactId>
<version>4.13.0</version>
</dependency>
Since version 4.7
, the release versions of the main generator library and the (standard) victools
modules listed above are aligned. It is recommended to use identical versions for all of them to ensure compatibility.
Code
Complete/Minimal Example
import com.fasterxml.jackson.databind.JsonNode;
import com.github.victools.jsonschema.generator.OptionPreset;
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfig;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.github.victools.jsonschema.generator.SchemaVersion;
SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2019_09, OptionPreset.PLAIN_JSON);
SchemaGeneratorConfig config = configBuilder.build();
SchemaGenerator generator = new SchemaGenerator(config);
JsonNode jsonSchema = generator.generateSchema(YourClass.class);
System.out.println(jsonSchema.toString());