-
Notifications
You must be signed in to change notification settings - Fork 3
Included JSON Support
The DropWizard RAML library includes support for JSON schema and example generation. This uses a combination of the Jackson libraries generally included in the DropWizard framework along with a third-party library that extends schema generation: Jackson jsonSchema Generator.
If your schema always serializes a type differently (eg. serializing a BigDecimal
as a string
rather than a number
), you can override that type by registering the mapping with the JsonSchemaFactory
instance.
JsonSchemaFactory.registerRemappedType(BigDecimal.class, String.class);
This will mean the JSON schema generation will report BigDecimal
as JSON type string
.
This will work in conjunction with other injection annotations, such as:
@JsonSchemaInject(strings = @JsonSchemaString(path = "pattern", value = "^\\d+\\.\\d{2}$"))
Combined with the above remapping, will report a BigDecimal
with the following JSON schema definition:
{
"type": "string",
"pattern": "^\\d+\\.\\d{2}$"
}
Often when defining an enum in code via Jackson, the schema would ideally define the limitation of values for that particular property.
Given an enum type of:
public enum CarType {
Sedan,
StationWagon,
SUV
}
Create a class that extends JsonSchemaEnumTypeSupplier
.
public class CarTypeSchemaSupplier extends JsonSchemaEnumTypeSupplier<CarType> {
}
You can then add the following annotation to your enum property in your Jackson class:
@JsonSchemaInject(jsonSuppliers = JsonSchemaEnumTypeSupplier.class)
This will then update the JSON schema to report an enum property as:
{
"type": "string",
"enum": ["Sedan", "StationWagon", "SUV"]
}