Class CustomMapEditor

java.lang.Object
java.beans.PropertyEditorSupport
org.springframework.beans.propertyeditors.CustomMapEditor
All Implemented Interfaces:
PropertyEditor

public class CustomMapEditor extends PropertyEditorSupport
Property editor for Maps, converting any source Map to a given target Map type.
Since:
2.0.1
Author:
Juergen Hoeller
See Also:
  • Constructor Details

    • CustomMapEditor

      public CustomMapEditor(Class<? extends Map> mapType)
      Create a new CustomMapEditor for the given target type, keeping an incoming null as-is.
      Parameters:
      mapType - the target type, which needs to be a sub-interface of Map or a concrete Map class
      See Also:
    • CustomMapEditor

      public CustomMapEditor(Class<? extends Map> mapType, boolean nullAsEmptyMap)
      Create a new CustomMapEditor for the given target type.

      If the incoming value is of the given type, it will be used as-is. If it is a different Map type or an array, it will be converted to a default implementation of the given Map type. If the value is anything else, a target Map with that single value will be created.

      The default Map implementations are: TreeMap for SortedMap, and LinkedHashMap for Map.

      Parameters:
      mapType - the target type, which needs to be a sub-interface of Map or a concrete Map class
      nullAsEmptyMap - ap whether to convert an incoming null value to an empty Map (of the appropriate type)
      See Also:
  • Method Details

    • setAsText

      public void setAsText(String text) throws IllegalArgumentException
      Convert the given text value to a Map with a single element.
      Specified by:
      setAsText in interface PropertyEditor
      Overrides:
      setAsText in class PropertyEditorSupport
      Throws:
      IllegalArgumentException
    • setValue

      public void setValue(@Nullable Object value)
      Convert the given value to a Map of the target type.
      Specified by:
      setValue in interface PropertyEditor
      Overrides:
      setValue in class PropertyEditorSupport
    • createMap

      protected Map<Object,Object> createMap(Class<? extends Map> mapType, int initialCapacity)
      Create a Map of the given type, with the given initial capacity (if supported by the Map type).
      Parameters:
      mapType - a sub-interface of Map
      initialCapacity - the initial capacity
      Returns:
      the new Map instance
    • alwaysCreateNewMap

      protected boolean alwaysCreateNewMap()
      Return whether to always create a new Map, even if the type of the passed-in Map already matches.

      Default is "false"; can be overridden to enforce creation of a new Map, for example to convert elements in any case.

      See Also:
    • convertKey

      protected Object convertKey(Object key)
      Hook to convert each encountered Map key. The default implementation simply returns the passed-in key as-is.

      Can be overridden to perform conversion of certain keys, for example from String to Integer.

      Only called if actually creating a new Map! This is by default not the case if the type of the passed-in Map already matches. Override alwaysCreateNewMap() to enforce creating a new Map in every case.

      Parameters:
      key - the source key
      Returns:
      the key to be used in the target Map
      See Also:
    • convertValue

      protected Object convertValue(Object value)
      Hook to convert each encountered Map value. The default implementation simply returns the passed-in value as-is.

      Can be overridden to perform conversion of certain values, for example from String to Integer.

      Only called if actually creating a new Map! This is by default not the case if the type of the passed-in Map already matches. Override alwaysCreateNewMap() to enforce creating a new Map in every case.

      Parameters:
      value - the source value
      Returns:
      the value to be used in the target Map
      See Also:
    • getAsText

      @Nullable public String getAsText()
      This implementation returns null to indicate that there is no appropriate text representation.
      Specified by:
      getAsText in interface PropertyEditor
      Overrides:
      getAsText in class PropertyEditorSupport