code: private MutablePropertyValues modifyProperties(MutablePropertyValues propertyValues, Object target) {
          propertyValues = getPropertyValuesForNamePrefix(propertyValues);
          if (target instanceof RelaxedDataBinder.MapHolder) {
              propertyValues = addMapPrefix(propertyValues);
          }
          BeanWrapper wrapper = new BeanWrapperImpl(target);
          wrapper.setConversionService(new RelaxedConversionService(getConversionService()));
          wrapper.setAutoGrowNestedPaths(true);
          List<PropertyValue> sortedValues = new ArrayList<PropertyValue>();
          Set<String> modifiedNames = new HashSet<String>();
          List<String> sortedNames = getSortedPropertyNames(propertyValues);
          for (String name : sortedNames) {
              PropertyValue propertyValue = propertyValues.getPropertyValue(name);
              PropertyValue modifiedProperty = modifyProperty(wrapper, propertyValue);
              if (modifiedNames.add(modifiedProperty.getName())) {
                  sortedValues.add(modifiedProperty);
              }
          }
          return new MutablePropertyValues(sortedValues);
      }
docs: Modify the property values so that period separated property paths are valid
  for map keys. Also creates new maps for properties of map type that are null
  (assuming all maps are potentially nested). The standard bracket {@code[...]}
  dereferencing is also accepted.
  
  @param propertyValues the property values
  @param target the target object
  @return modified property values