Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

(DEPRECATED for Jackson 3) Module for generating JSON Schema (v3) definitions from POJOs

License

NotificationsYou must be signed in to change notification settings

FasterXML/jackson-module-jsonSchema

Repository files navigation

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.

Status

Build StatusMaven CentralJavadoc

Version 2.4 was considered the first stable version of the module.

Two modules (with Jackson 2.15)

Starting with upcoming Jackson 2.15, this repository contains TWO versions of the module:

  1. Old JSON Schema modulecom.fasterxml.jackson.module:jackson-module-jsonSchema (since 2.0)
  2. New JSON Schema modulecom.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.

Future plans (lack thereof)

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.

Example Usage

(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.

Adding Property Processing

Seecom.fasterxml.jackson.module.jsonSchema.customProperties.TitleSchemaFactoryWrapper for an example of writing custom schema properties.

Required Fields

JSON Schema has the ability to mark fields as required. This module supports this via the@JsonProperty(required = true) field annotation.

JsonSchema Hypermedia support

Generic support

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)

Describing JSON hyper-schema

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"    }  }}

More

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

Stars

Watchers

Forks

Packages

No packages published

Contributors28

Languages


[8]ページ先頭

©2009-2025 Movatter.jp