Custom Message Support

Users can add their own custom messages for schema validation using the instructions in this page.

The json schema itself has a place for the customised message.

Examples

Example 1 :

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
    }
  },
  "message": {
    "maxItems" : "MaxItem must be 3 only",
    "type" : "Invalid type"
  }
}

Example 2 :

To keep custom messages distinct for each type, one can even give them in each property.

{
  "type": "object",
  "properties": {
    "dateTime": {
      "type": "string",
      "format": "date",
      "message": {
        "format": "Keep date format yyyy-mm-dd"
      }
    },
    "uuid": {
      "type": "string",
      "format": "uuid",
      "message": {
        "format": "Input should be uuid"
      }
    }
  }
}

Example 3 :

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"],
  "message": {
    "type" : "should be an object",
    "required": {
      "foo" : "'foo' is required",
      "bar" : "'bar' is required"
    }
  }
}

Example 4 :

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"],
  "message": {
    "type" : "should be an object",
    "required": {
      "foo" : "{0}: ''foo'' is required",
      "bar" : "{0}: ''bar'' is required"
    }
  }
}

Format

"message": {
    [validationType] : [customMessage]
  }

Users can express custom message in the 'message' field. The 'validation type' should be the key and the 'custom message' should be the value.

Also, we can make format the dynamic message with properties returned from ValidationMessage.java class such as arguments, path e.t.c.

Take a look at the PR1 and PR2