Schema authors can provide their own custom messages within the schema using a specified keyword.
This is not enabled by default and the SchemaValidatorsConfig
must be configured with the errorMessageKeyword
.
SchemaValidatorsConfig config = SchemaValidatorsConfig.builder().errorMessageKeyword("errorMessage").build();
The custom message can be provided outside properties for each type, as shown in the schema below.
{
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"foo": {
"type": "array",
"maxItems": 3
}
},
"errorMessage": {
"maxItems": "MaxItem must be 3 only",
"type": "Invalid type"
}
}
To keep custom messages distinct for each type, one can even give them in each property.
{
"type": "object",
"properties": {
"dateTime": {
"type": "string",
"format": "date",
"errorMessage": {
"format": "Keep date format yyyy-mm-dd"
}
},
"uuid": {
"type": "string",
"format": "uuid",
"errorMessage": {
"format": "Input should be uuid"
}
}
}
}
For the keywords required
and dependencies
, different messages can be specified for different properties.
{
"type": "object",
"properties": {
"foo": {
"type": "number"
},
"bar": {
"type": "string"
}
},
"required": ["foo", "bar"],
"errorMessage": {
"type": "should be an object",
"required": {
"foo": "'foo' is required",
"bar": "'bar' is required"
}
}
}
The message can use arguments but note that single quotes need to be escaped as java.text.MessageFormat
will be used to format the message.
{
"type": "object",
"properties": {
"foo": {
"type": "number"
},
"bar": {
"type": "string"
}
},
"required": ["foo", "bar"],
"errorMessage": {
"type": "should be an object",
"required": {
"foo": "{0}: ''foo'' is required",
"bar": "{0}: ''bar'' is required"
}
}
}
"errorMessage": {
"[keyword]": "[customMessage]"
}
Users can provide custom messages in the configured keyword, typically errorMessage
or message
field.
The keyword
should be the key and the customMessage
should be the value.