Schema authors can provide their own custom messages within the schema using a specified keyword.
This is not enabled by default and the SchemaRegistryConfig must be configured with the errorMessageKeyword.
SchemaRegistryConfig config = SchemaRegistryConfig.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.