Class ConcurrentModel

All Implemented Interfaces:
Serializable, ConcurrentMap<String,Object>, Map<String,Object>, Model
Direct Known Subclasses:
BindingAwareConcurrentModel

public class ConcurrentModel extends ConcurrentHashMap<String,Object> implements Model
Implementation of the Model interface based on a ConcurrentHashMap for use in concurrent scenarios.

Exposed to handler methods by Spring WebFlux, typically via a declaration of the Model interface. There is typically no need to create it within user code. If necessary a handler method can return a regular java.util.Map, likely a java.util.ConcurrentMap, for a pre-determined model.

Since:
5.0
Author:
Rossen Stoyanchev
See Also:
  • Constructor Details

    • ConcurrentModel

      public ConcurrentModel()
      Construct a new, empty ConcurrentModel.
    • ConcurrentModel

      public ConcurrentModel(String attributeName, Object attributeValue)
      Construct a new ConcurrentModel containing the supplied attribute under the supplied name.
      See Also:
    • ConcurrentModel

      public ConcurrentModel(Object attributeValue)
      Construct a new ConcurrentModel containing the supplied attribute.

      Uses attribute name generation to generate the key for the supplied model object.

      See Also:
  • Method Details

    • put

      @Nullable public Object put(String key, @Nullable Object value)
      Specified by:
      put in interface Map<String,Object>
      Overrides:
      put in class ConcurrentHashMap<String,Object>
    • putAll

      public void putAll(Map<? extends String,?> map)
      Specified by:
      putAll in interface Map<String,Object>
      Overrides:
      putAll in class ConcurrentHashMap<String,Object>
    • addAttribute

      public ConcurrentModel addAttribute(String attributeName, @Nullable Object attributeValue)
      Add the supplied attribute under the supplied name.
      Specified by:
      addAttribute in interface Model
      Parameters:
      attributeName - the name of the model attribute (never null)
      attributeValue - the model attribute value (ignored if null, just removing an existing entry if any)
    • addAttribute

      public ConcurrentModel addAttribute(Object attributeValue)
      Add the supplied attribute to this Map using a generated name.

      Note: Empty Collections are not added to the model when using this method because we cannot correctly determine the true convention name. View code should check for null rather than for empty collections as is already done by JSTL tags.

      Specified by:
      addAttribute in interface Model
      Parameters:
      attributeValue - the model attribute value (never null)
    • addAllAttributes

      public ConcurrentModel addAllAttributes(@Nullable Collection<?> attributeValues)
      Copy all attributes in the supplied Collection into this Map, using attribute name generation for each element.
      Specified by:
      addAllAttributes in interface Model
      See Also:
    • addAllAttributes

      public ConcurrentModel addAllAttributes(@Nullable Map<String,?> attributes)
      Copy all attributes in the supplied Map into this Map.
      Specified by:
      addAllAttributes in interface Model
      See Also:
    • mergeAttributes

      public ConcurrentModel mergeAttributes(@Nullable Map<String,?> attributes)
      Copy all attributes in the supplied Map into this Map, with existing objects of the same name taking precedence (i.e. not getting replaced).
      Specified by:
      mergeAttributes in interface Model
    • containsAttribute

      public boolean containsAttribute(String attributeName)
      Does this model contain an attribute of the given name?
      Specified by:
      containsAttribute in interface Model
      Parameters:
      attributeName - the name of the model attribute (never null)
      Returns:
      whether this model contains a corresponding attribute
    • getAttribute

      @Nullable public Object getAttribute(String attributeName)
      Description copied from interface: Model
      Return the attribute value for the given name, if any.
      Specified by:
      getAttribute in interface Model
      Parameters:
      attributeName - the name of the model attribute (never null)
      Returns:
      the corresponding attribute value, or null if none
    • asMap

      public Map<String,Object> asMap()
      Description copied from interface: Model
      Return the current set of model attributes as a Map.
      Specified by:
      asMap in interface Model