DATACMNS-1377 - ConvertingPropertyAccessor now properly coverts values for property paths.

Previously, ConvertingPropertyAccessor did not override PersistentPropertyAccessor.setProperty(PersistentPropertyPath, Object), so that the target value had to be of the leaf property's type. We now implement that method and convert it into that type before invoking the super method.
This commit is contained in:
Oliver Gierke
2018-08-17 11:46:14 +02:00
parent 14c2b5b766
commit b0eb0c47d2
2 changed files with 32 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ package org.springframework.data.mapping.model;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.mapping.PersistentPropertyPath;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -60,6 +61,18 @@ public class ConvertingPropertyAccessor<T> implements PersistentPropertyAccessor
accessor.setProperty(property, convertIfNecessary(value, property.getType()));
}
/*
* (non-Javadoc)
* @see org.springframework.data.mapping.PersistentPropertyAccessor#setProperty(org.springframework.data.mapping.PersistentPropertyPath, java.lang.Object)
*/
@Override
public void setProperty(PersistentPropertyPath<? extends PersistentProperty<?>> path, @Nullable Object value) {
Object converted = convertIfNecessary(value, path.getRequiredLeafProperty().getType());
PersistentPropertyAccessor.super.setProperty(path, converted);
}
/*
* (non-Javadoc)
* @see org.springframework.data.mapping.PersistentPropertyAccessor#getProperty(org.springframework.data.mapping.PersistentProperty)