org.springframework.validation

Class DefaultMessageCodesResolver

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


    public class DefaultMessageCodesResolver
    extends java.lang.Object
    implements MessageCodesResolver, java.io.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, e.g. "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:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      static java.lang.String CODE_SEPARATOR
      The separator that this implementation uses when resolving message codes.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      protected void buildFieldList(java.lang.String field, java.util.List<java.lang.String> fieldList)
      Add both keyed and non-keyed entries for the supplied field to the supplied field list.
      protected java.lang.String getPrefix()
      Return the prefix to be applied to any code built by this resolver.
      protected java.lang.String postProcessMessageCode(java.lang.String code)
      Post-process the given message code, built by this resolver.
      java.lang.String[] resolveMessageCodes(java.lang.String errorCode, java.lang.String objectName)
      Build message codes for the given error code and object name.
      java.lang.String[] resolveMessageCodes(java.lang.String errorCode, java.lang.String objectName, java.lang.String field, java.lang.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.
      void setMessageCodeFormatter(MessageCodeFormatter formatter)
      Specify the format for message codes built by this resolver.
      void setPrefix(java.lang.String prefix)
      Specify a prefix to be applied to any code built by this resolver.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • CODE_SEPARATOR

        public static final java.lang.String CODE_SEPARATOR
        The separator that this implementation uses when resolving message codes.
        See Also:
        Constant Field Values
    • Constructor Detail

      • DefaultMessageCodesResolver

        public DefaultMessageCodesResolver()
    • Method Detail

      • setPrefix

        public void setPrefix(@Nullable
                              java.lang.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 java.lang.String getPrefix()
        Return the prefix to be applied to any code built by this resolver.

        Returns an empty String in case of no prefix.

      • resolveMessageCodes

        public java.lang.String[] resolveMessageCodes(java.lang.String errorCode,
                                                      java.lang.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 java.lang.String[] resolveMessageCodes(java.lang.String errorCode,
                                                      java.lang.String objectName,
                                                      java.lang.String field,
                                                      @Nullable
                                                      java.lang.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(java.lang.String field,
                                      java.util.List<java.lang.String> fieldList)
        Add both keyed and non-keyed entries for the supplied field to the supplied field list.
      • postProcessMessageCode

        protected java.lang.String postProcessMessageCode(java.lang.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:
        setPrefix(java.lang.String)