- Notifications
You must be signed in to change notification settings - Fork138
(DEPRECATED for Jackson 3) Module for generating JSON Schema (v3) definitions from POJOs
License
FasterXML/jackson-module-jsonSchema
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
JacksonJSON Schema Module
This module supports the creation of a JSON Schema (v3)
Note that since JSON Schema draft version 3 and 4 are incompatible, this module CAN NOT, as-is,support v4. There is another modulembknor-jackson-jsonSchema that does support v4, however.
It is possible that in future this repo could have 2 different modules; one for v3, another v4.And if necessary, more if future revisions also prove incompatible.
Version 2.4 was considered the first stable version of the module.
Starting with upcoming Jackson 2.15, this repository contains TWO versions of the module:
- Old JSON Schema module
com.fasterxml.jackson.module:jackson-module-jsonSchema(since 2.0) - New JSON Schema module
com.fasterxml.jackson.module:jackson-module-jsonSchema-jakarta(2.15+)
depending on whether system needs to work with "old"javax/JAXB APIs (first module) or newer "Jakarta" APIs.
Due to lack of support by community, this module is NOT planned to be supported beyondJackson 2.x -- no work has been done for it to work with future Jackson 3.0.Users are encouraged to use more up-to-date JSON Schema support tools.
(fromTestGenerateJsonSchema)
simply add a dependency"com.fasterxml.jackson.module:jackson-module-jsonSchema:2.15.0"or"com.fasterxml.jackson.module:jackson-module-jsonSchema-jakarta:2.15.0" for the jakarta namespace
and for gradle, at least, you can simply addmavenLocal() to your repositories.Maven should resolve the dependency from its local repo transparently.
ObjectMappermapper =newObjectMapper();// configure mapper, if necessary, then create schema generatorJsonSchemaGeneratorschemaGen =newJsonSchemaGenerator(mapper);JsonSchemaschema =schemaGen.generateSchema(SimpleBean.class);
This will yield a java pojo representing a JSON Schema, which can itself easily be serialized with jackson, or configured with java. Customizing the generation should be simply a matter of locating the particular stage of generation you want to override, and replacing or extending that particular object in the dependency injection cycle in schemafactory wrapper.
Seecom.fasterxml.jackson.module.jsonSchema.customProperties.TitleSchemaFactoryWrapper for an example of writing custom schema properties.
JSON Schema has the ability to mark fields as required. This module supports this via the@JsonProperty(required = true) field annotation.
Current implementation is partial for IETF published draft v4 (http://json-schema.org/latest/json-schema-hypermedia.html).
Currently 2 aspects of IETF supported:
- pathStart - URI that defines what the instance's URI MUST start with in order to validate.
- links - associated Link Description Objects with instances.
You can enable HypermediaSupport usingcom.fasterxml.jackson.module.jsonSchema.customProperties.HyperSchemaFactoryWrapper.Example:
HyperSchemaFactoryWrapperpersonVisitor =newHyperSchemaFactoryWrapper();ObjectMappermapper =newObjectMapper();mapper.acceptJsonFormatVisitor(Person.class,personVisitor);JsonSchemapersonSchema =personVisitor.finalSchema();
By default all default values for Link Description Object are ignored in the output (method = GET, enctype = application/json, mediaType = application/json), to enable default setIgnoreDefaults(true)
You can describe hyperlinks, using annotations @JsonHyperSchema & @Link
public class Pet { public String genus; } @JsonHyperSchema( pathStart = "http://localhost:8080/persons/", links = { @Link(href = "{name}", rel = "self"), @Link(href = "{name}/pet", rel = "pet", targetSchema = Pet.class) }) public class Person { public String name; public String hat; }Would generate following values:
{ "type" : "object", "pathStart" : "http://localhost:8080/persons/", "links" : [ { "href" : "http://localhost:8080/persons/{name}", "rel" : "self" }, { "href" : "http://localhost:8080/persons/{name}/pet", "rel" : "pet", "targetSchema" : { "type" : "object", "properties" : { "genus" : { "type" : "string" } } } } ], "properties" : { "name" : { "type" : "string" }, "hat" : { "type" : "string" } }}Check outProject Wiki for more information (javadocs, downloads).
About
(DEPRECATED for Jackson 3) Module for generating JSON Schema (v3) definitions from POJOs
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.