A Java JSON Schema and Hyper-Schema generator. Currently, it is based on v4 draft. Supports Java 8 Date and Time API.
<dependency>
<groupId>com.github.reinert</groupId>
<artifactId>jjschema</artifactId>
<version>1.5</version>
</dependency>
Suppose the following Class:
@Attributes(title="Product", description="A product from Acme's catalog")
static class Product {
@Attributes(required=true, description="The unique identifier for a product")
private long id;
@Attributes(required=true, description="Name of the product")
private String name;
@Attributes(required=true, minimum=0, exclusiveMinimum=true)
private BigDecimal price;
@Attributes(minItems=1,uniqueItems=true)
private List<String> tags;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public List<String> getTags() {
return tags;
}
public void setTags(List<String> tags) {
this.tags = tags;
}
}
Type the following code:
JsonSchemaFactory schemaFactory = new JsonSchemaV4Factory();
schemaFactory.setAutoPutDollarSchema(true);
JsonNode productSchema = schemaFactory.createSchema(Product.class);
System.out.println(productSchema);
The output:
{
"type" : "object",
"description" : "A product from Acme's catalog",
"title" : "Product",
"properties" : {
"id" : {
"type" : "integer",
"description" : "The unique identifier for a product"
},
"name" : {
"type" : "string",
"description" : "Name of the product"
},
"price" : {
"type" : "number",
"minimum" : 0,
"exclusiveMinimum" : true
},
"tags" : {
"type" : "array",
"items" : {
"type" : "string"
},
"uniqueItems" : true,
"minItems" : 1
}
},
"required" : [ "id", "name", "price" ],
"$schema" : "http://json-schema.org/draft-04/schema#"
}