spring-framework / org.springframework.validation / DefaultMessageCodesResolver

DefaultMessageCodesResolver

open class DefaultMessageCodesResolver : MessageCodesResolver, Serializable

Default implementation of the MessageCodesResolver interface.

Will create two message codes for an object error, in the following order (when using the prefixed formatter):

Will create four message codes for a field specification, in the following order:

For example, in case of code "typeMismatch", object name "user", field "age":

This resolution algorithm thus can be leveraged for example to show specific messages for binding errors like "required" and "typeMismatch":

In case of array, List or java.util.Map properties, both codes for specific elements and for the whole collection are generated. Assuming a field "name" of an array "groups" in object "user":

By default the errorCodes will be placed at the beginning of constructed message strings. The messageCodeFormatter property can be used to specify an alternative concatenation MessageCodeFormatter.

In order to group all codes into a specific category within your resource bundles, e.g. "validation.typeMismatch.name" instead of the default "typeMismatch.name", consider specifying a prefix to be applied.

Author
Juergen Hoeller

Author
Phillip Webb

Author
Chris Beams

Since
1.0.1

Constructors

<init>

DefaultMessageCodesResolver()

Default implementation of the MessageCodesResolver interface.

Will create two message codes for an object error, in the following order (when using the prefixed formatter):

  • 1.: code + "." + object name
  • 2.: code

Will create four message codes for a field specification, in the following order:

  • 1.: code + "." + object name + "." + field
  • 2.: code + "." + field
  • 3.: code + "." + field type
  • 4.: code

For example, in case of code "typeMismatch", object name "user", field "age":

  • 1. try "typeMismatch.user.age"
  • 2. try "typeMismatch.age"
  • 3. try "typeMismatch.int"
  • 4. try "typeMismatch"

This resolution algorithm thus can be leveraged for example to show specific messages for binding errors like "required" and "typeMismatch":

  • at the object + field level ("age" field, but only on "user");
  • at the field level (all "age" fields, no matter which object name);
  • or at the general level (all fields, on any object).

In case of array, List or java.util.Map properties, both codes for specific elements and for the whole collection are generated. Assuming a field "name" of an array "groups" in object "user":

  • 1. try "typeMismatch.user.groups[0].name"
  • 2. try "typeMismatch.user.groups.name"
  • 3. try "typeMismatch.groups[0].name"
  • 4. try "typeMismatch.groups.name"
  • 5. try "typeMismatch.name"
  • 6. try "typeMismatch.java.lang.String"
  • 7. try "typeMismatch"

By default the errorCodes will be placed at the beginning of constructed message strings. The messageCodeFormatter property can be used to specify an alternative concatenation MessageCodeFormatter.

In order to group all codes into a specific category within your resource bundles, e.g. "validation.typeMismatch.name" instead of the default "typeMismatch.name", consider specifying a prefix to be applied.

Properties

CODE_SEPARATOR

static val CODE_SEPARATOR: String

The separator that this implementation uses when resolving message codes.

Functions

resolveMessageCodes

open fun resolveMessageCodes(errorCode: String, objectName: String): Array<String>open fun resolveMessageCodes(errorCode: String, objectName: String, field: String, fieldType: Class<*>): Array<String>

Build the code list for the given code and field: an object/field-specific code, a field-specific code, a plain error code.

Arrays, Lists and Maps are resolved both for specific elements and the whole collection.

See the DefaultMessageCodesResolver for details on the generated codes.

setMessageCodeFormatter

open fun setMessageCodeFormatter(formatter: MessageCodeFormatter): Unit

Specify the format for message codes built by this resolver.

The default is Format#PREFIX_ERROR_CODE.

setPrefix

open fun setPrefix(prefix: String): Unit

Specify a prefix to be applied to any code built by this resolver.

Default is none. Specify, for example, "validation." to get error codes like "validation.typeMismatch.name".