From f6c62d6e2f58ab57add1330e413b8c372f3148fc Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 4 Feb 2020 09:30:14 +0100 Subject: [PATCH] DATAMONGO-2079 - MappingMongoConverter no longer implements ValueResolver. MappingMongoConverter no longer implements a package-private interface so that converter instances can be proxied. Original Pull Request: #832 --- .../mongodb/core/convert/MappingMongoConverter.java | 11 ++++++----- .../data/mongodb/core/convert/ValueResolver.java | 6 ++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 5e87e77ec..d40947f0e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -92,7 +92,7 @@ import com.mongodb.DBRef; * @author Jordi Llach * @author Mark Paluch */ -public class MappingMongoConverter extends AbstractMongoConverter implements ApplicationContextAware, ValueResolver { +public class MappingMongoConverter extends AbstractMongoConverter implements ApplicationContextAware { private static final String INCOMPATIBLE_TYPES = "Cannot convert %1$s of type %2$s into an instance of %3$s! Implement a custom Converter<%2$s, %3$s> and register it with the CustomConversions. Parent object was: %4$s"; private static final String INVALID_TYPE_TO_READ = "Expected to read Document %s into type %s but didn't find a PersistentEntity for the latter!"; @@ -132,7 +132,8 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App this.idMapper = new QueryMapper(this); this.spELContext = new SpELContext(DocumentPropertyAccessor.INSTANCE); - this.dbRefProxyHandler = new DefaultDbRefProxyHandler(spELContext, mappingContext, MappingMongoConverter.this); + this.dbRefProxyHandler = new DefaultDbRefProxyHandler(spELContext, mappingContext, + MappingMongoConverter.this::getValueInternal); } /** @@ -432,7 +433,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App SpELExpressionEvaluator evaluator) { return new DefaultDbRefResolverCallback(documentAccessor.getDocument(), currentPath, evaluator, - MappingMongoConverter.this); + MappingMongoConverter.this::getValueInternal); } private void readAssociation(Association association, PersistentPropertyAccessor accessor, @@ -1048,7 +1049,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App * (non-Javadoc) * @see org.springframework.data.mongodb.core.convert.ValueResolver#getValueInternal(org.springframework.data.mongodb.core.mapping.MongoPersistentProperty, com.mongodb.Document, org.springframework.data.mapping.model.SpELExpressionEvaluator, java.lang.Object) */ - @Override + @Nullable public Object getValueInternal(MongoPersistentProperty prop, Bson bson, SpELExpressionEvaluator evaluator, ObjectPath path) { return new MongoDbPropertyValueProvider(bson, evaluator, path).getPropertyValue(prop); @@ -1492,7 +1493,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } DbRefResolverCallback callback = new DefaultDbRefResolverCallback(accessor.getDocument(), path, evaluator, - MappingMongoConverter.this); + MappingMongoConverter.this::getValueInternal); DBRef dbref = rawRefValue instanceof DBRef ? (DBRef) rawRefValue : null; return (T) dbRefResolver.resolveDbRef(property, dbref, callback, dbRefProxyHandler); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/ValueResolver.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/ValueResolver.java index c449c715e..f18593c3b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/ValueResolver.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/ValueResolver.java @@ -19,12 +19,14 @@ import org.bson.Document; import org.bson.conversions.Bson; import org.springframework.data.mapping.model.SpELExpressionEvaluator; import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; +import org.springframework.lang.Nullable; /** * Internal API to trigger the resolution of properties. * * @author Oliver Gierke * @author Christoph Strobl + * @author Mark Paluch */ interface ValueResolver { @@ -38,6 +40,6 @@ interface ValueResolver { * @param parent * @return */ - Object getValueInternal(MongoPersistentProperty prop, Bson bson, SpELExpressionEvaluator evaluator, - ObjectPath path); + @Nullable + Object getValueInternal(MongoPersistentProperty prop, Bson bson, SpELExpressionEvaluator evaluator, ObjectPath path); }