Class DefaultMessageCodesResolver

java.lang.Object
org.springframework.validation.DefaultMessageCodesResolver
All Implemented Interfaces:
Serializable, MessageCodesResolver

public class DefaultMessageCodesResolver extends Object implements 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):

  • 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 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 format.

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

Since:
1.0.1
Author:
Juergen Hoeller, Phillip Webb, Chris Beams
See Also:
  • Field Details

    • CODE_SEPARATOR

      public static final String CODE_SEPARATOR
      The separator that this implementation uses when resolving message codes.
      See Also:
  • Constructor Details

    • DefaultMessageCodesResolver

      public DefaultMessageCodesResolver()
  • Method Details

    • setPrefix

      public void setPrefix(@Nullable String prefix)
      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".

    • getPrefix

      protected String getPrefix()
      Return the prefix to be applied to any code built by this resolver.

      Returns an empty String in case of no prefix.

    • setMessageCodeFormatter

      public void setMessageCodeFormatter(@Nullable MessageCodeFormatter formatter)
      Specify the format for message codes built by this resolver.

      The default is DefaultMessageCodesResolver.Format.PREFIX_ERROR_CODE.

      Since:
      3.2
      See Also:
    • resolveMessageCodes

      public String[] resolveMessageCodes(String errorCode, String objectName)
      Description copied from interface: MessageCodesResolver
      Build message codes for the given error code and object name. Used for building the codes list of an ObjectError.
      Specified by:
      resolveMessageCodes in interface MessageCodesResolver
      Parameters:
      errorCode - the error code used for rejecting the object
      objectName - the name of the object
      Returns:
      the message codes to use
    • resolveMessageCodes

      public String[] resolveMessageCodes(String errorCode, String objectName, String field, @Nullable Class<?> fieldType)
      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 class level javadoc for details on the generated codes.

      Specified by:
      resolveMessageCodes in interface MessageCodesResolver
      Parameters:
      errorCode - the error code used for rejecting the value
      objectName - the name of the object
      field - the field name
      fieldType - the field type (may be null if not determinable)
      Returns:
      the list of codes
    • buildFieldList

      protected void buildFieldList(String field, List<String> fieldList)
      Add both keyed and non-keyed entries for the supplied field to the supplied field list.
    • postProcessMessageCode

      protected String postProcessMessageCode(String code)
      Post-process the given message code, built by this resolver.

      The default implementation applies the specified prefix, if any.

      Parameters:
      code - the message code as built by this resolver
      Returns:
      the final message code to be returned
      See Also: