public class MappingMongoConverter extends AbstractMongoConverter implements ApplicationContextAware
MongoConverter
that uses a MappingContext
to do sophisticated mapping of domain objects to
Document
.Modifier and Type | Class and Description |
---|---|
protected static class |
MappingMongoConverter.ConversionContext
Conversion context holding references to simple
ValueConverter and ContainerValueConverter . |
Modifier and Type | Field and Description |
---|---|
protected ApplicationContext |
applicationContext |
static ClassTypeInformation<org.bson.conversions.Bson> |
BSON |
protected CodecRegistryProvider |
codecRegistryProvider |
protected org.springframework.data.mongodb.core.convert.DefaultDbRefProxyHandler |
dbRefProxyHandler |
protected DbRefResolver |
dbRefResolver |
protected QueryMapper |
idMapper |
protected static Log |
LOGGER |
protected String |
mapKeyDotReplacement |
protected MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> |
mappingContext |
protected ReferenceLookupDelegate |
referenceLookupDelegate |
protected MongoTypeMapper |
typeMapper |
conversions, conversionService, instantiators
Constructor and Description |
---|
MappingMongoConverter(DbRefResolver dbRefResolver,
MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext)
|
MappingMongoConverter(MongoDatabaseFactory mongoDbFactory,
MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext)
Deprecated.
use the constructor taking a
DbRefResolver instead. |
Modifier and Type | Method and Description |
---|---|
protected void |
addCustomTypeKeyIfNecessary(TypeInformation<?> type,
Object value,
org.bson.conversions.Bson bson)
Adds custom type information to the given
Document if necessary. |
Object |
convertToMongoType(Object obj,
MongoPersistentEntity entity) |
Object |
convertToMongoType(Object obj,
TypeInformation<?> typeInformation)
Converts the given object into one Mongo will be able to store natively but retains the type information in case
the given
TypeInformation differs from the given object type. |
protected List<Object> |
createCollection(Collection<?> collection,
MongoPersistentProperty property)
Writes the given
Collection using the given MongoPersistentProperty information. |
protected com.mongodb.DBRef |
createDBRef(Object target,
MongoPersistentProperty property) |
protected org.bson.conversions.Bson |
createMap(Map<Object,Object> map,
MongoPersistentProperty property)
Writes the given
Map using the given MongoPersistentProperty information. |
protected MappingMongoConverter.ConversionContext |
getConversionContext(org.springframework.data.mongodb.core.convert.ObjectPath path)
Creates a new
MappingMongoConverter.ConversionContext given ObjectPath . |
CustomConversions |
getCustomConversions()
Returns the
CustomConversions for this converter. |
MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> |
getMappingContext() |
protected Object |
getPotentiallyConvertedSimpleRead(Object value,
TypeInformation<?> target)
Checks whether we have a custom conversion for the given simple object.
|
ProjectionFactory |
getProjectionFactory()
Returns the
ProjectionFactory for this converter. |
MongoTypeMapper |
getTypeMapper()
Returns the
TypeMapper being used to write type information into Document s created with that
converter. |
Class<?> |
getWriteTarget(Class<?> source)
Get the conversion target type if defined or return the source.
|
protected <T> T |
maybeCallAfterConvert(T object,
org.bson.Document document,
String collection) |
List<Object> |
maybeConvertList(Iterable<?> source,
TypeInformation<?> typeInformation) |
protected String |
potentiallyEscapeMapKey(String source)
Potentially replaces dots in the given map key with the configured map key replacement if configured or aborts
conversion if none is configured.
|
protected String |
potentiallyUnescapeMapKey(String source)
Translates the map key replacements in the given key just read with a dot in case a map key replacement has been
configured.
|
<R> R |
project(EntityProjection<R,?> projection,
org.bson.conversions.Bson bson)
Apply a projection to
Bson and return the projection return type R . |
<S> S |
read(Class<S> clazz,
org.bson.conversions.Bson bson) |
protected <S> S |
read(TypeInformation<S> type,
org.bson.conversions.Bson bson) |
protected Object |
readCollectionOrArray(MappingMongoConverter.ConversionContext context,
Collection<?> source,
TypeInformation<?> targetType)
Reads the given
Collection into a collection of the given TypeInformation . |
protected <S> S |
readDocument(MappingMongoConverter.ConversionContext context,
org.bson.conversions.Bson bson,
TypeInformation<? extends S> typeHint)
Conversion method to materialize an object from a
document . |
protected Map<Object,Object> |
readMap(MappingMongoConverter.ConversionContext context,
org.bson.conversions.Bson bson,
TypeInformation<?> targetType)
|
protected Map<Object,Object> |
readMap(TypeInformation<?> type,
org.bson.conversions.Bson bson,
org.springframework.data.mongodb.core.convert.ObjectPath path)
Deprecated.
since 3.2. Use
readMap(ConversionContext, Bson, TypeInformation) instead. |
void |
setApplicationContext(ApplicationContext applicationContext) |
void |
setCodecRegistryProvider(CodecRegistryProvider codecRegistryProvider)
Configure a
CodecRegistryProvider that provides native MongoDB codecs for
reading values. |
void |
setEntityCallbacks(EntityCallbacks entityCallbacks)
|
void |
setMapKeyDotReplacement(String mapKeyDotReplacement)
Configure the characters dots potentially contained in a
Map shall be replaced with. |
void |
setTypeMapper(MongoTypeMapper typeMapper)
Configures the
MongoTypeMapper to be used to add type information to Document s created by the
converter and how to lookup type information from Document s when reading them. |
com.mongodb.DBRef |
toDBRef(Object object,
MongoPersistentProperty referringProperty)
Creates a
DBRef to refer to the given object. |
DocumentPointer |
toDocumentPointer(Object source,
MongoPersistentProperty referringProperty)
Creates a the
DocumentPointer representing the link to another entity. |
MappingMongoConverter |
with(MongoDatabaseFactory dbFactory)
|
void |
write(Object obj,
org.bson.conversions.Bson bson)
Root entry method into write conversion.
|
protected void |
writeInternal(Object obj,
org.bson.conversions.Bson bson,
MongoPersistentEntity<?> entity) |
protected void |
writeInternal(Object obj,
org.bson.conversions.Bson bson,
TypeInformation<?> typeHint)
Internal write conversion method which should be used for nested invocations.
|
protected org.bson.conversions.Bson |
writeMapInternal(Map<Object,Object> obj,
org.bson.conversions.Bson bson,
TypeInformation<?> propertyType)
|
protected void |
writePropertyInternal(Object obj,
org.springframework.data.mongodb.core.convert.DocumentAccessor accessor,
MongoPersistentProperty prop) |
afterPropertiesSet, getConversionService, setCustomConversions, setInstantiators
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
convertId, mapValueToTargetType
convertToMongoType
public static final ClassTypeInformation<org.bson.conversions.Bson> BSON
protected static final Log LOGGER
protected final MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext
protected final QueryMapper idMapper
protected final DbRefResolver dbRefResolver
protected final org.springframework.data.mongodb.core.convert.DefaultDbRefProxyHandler dbRefProxyHandler
protected final ReferenceLookupDelegate referenceLookupDelegate
@Nullable protected ApplicationContext applicationContext
protected MongoTypeMapper typeMapper
@Nullable protected CodecRegistryProvider codecRegistryProvider
public MappingMongoConverter(DbRefResolver dbRefResolver, MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext)
dbRefResolver
- must not be null.mappingContext
- must not be null.@Deprecated public MappingMongoConverter(MongoDatabaseFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext)
DbRefResolver
instead.mongoDbFactory
- must not be null.mappingContext
- must not be null.protected MappingMongoConverter.ConversionContext getConversionContext(org.springframework.data.mongodb.core.convert.ObjectPath path)
MappingMongoConverter.ConversionContext
given ObjectPath
.path
- the current ObjectPath
, must not be null.MappingMongoConverter.ConversionContext
.public void setTypeMapper(@Nullable MongoTypeMapper typeMapper)
MongoTypeMapper
to be used to add type information to Document
s created by the
converter and how to lookup type information from Document
s when reading them. Uses a
DefaultMongoTypeMapper
by default. Setting this to null will reset the TypeMapper
to the
default one.typeMapper
- the typeMapper to set. Can be null.public MongoTypeMapper getTypeMapper()
MongoConverter
TypeMapper
being used to write type information into Document
s created with that
converter.getTypeMapper
in interface MongoConverter
public ProjectionFactory getProjectionFactory()
MongoConverter
ProjectionFactory
for this converter.getProjectionFactory
in interface MongoConverter
public CustomConversions getCustomConversions()
MongoConverter
CustomConversions
for this converter.getCustomConversions
in interface MongoConverter
public void setMapKeyDotReplacement(@Nullable String mapKeyDotReplacement)
Map
shall be replaced with. By default we don't do
any translation but rather reject a Map
with keys containing dots causing the conversion for the entire
object to fail. If further customization of the translation is needed, have a look at
potentiallyEscapeMapKey(String)
as well as potentiallyUnescapeMapKey(String)
.
mapKeyDotReplacement
is used as-is during replacement operations without further processing (i.e. regex or
normalization).
mapKeyDotReplacement
- the mapKeyDotReplacement to set. Can be null.public void setCodecRegistryProvider(@Nullable CodecRegistryProvider codecRegistryProvider)
CodecRegistryProvider
that provides native MongoDB codecs
for
reading values.codecRegistryProvider
- can be null.public MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> getMappingContext()
getMappingContext
in interface EntityConverter<MongoPersistentEntity<?>,MongoPersistentProperty,Object,org.bson.conversions.Bson>
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
setApplicationContext
in interface ApplicationContextAware
BeansException
public void setEntityCallbacks(EntityCallbacks entityCallbacks)
EntityCallbacks
instance to use when invoking
callbacks
like the AfterConvertCallback
.
EntityCallbacks
.entityCallbacks
- must not be null.IllegalArgumentException
- if the given instance is null.public <R> R project(EntityProjection<R,?> projection, org.bson.conversions.Bson bson)
MongoConverter
Bson
and return the projection return type R
.
Non-projecting
descriptors fall back to regular
object materialization
.project
in interface MongoConverter
projection
- the projection descriptor, must not be null.bson
- must not be null.R
.public <S> S read(Class<S> clazz, org.bson.conversions.Bson bson)
read
in interface EntityReader<Object,org.bson.conversions.Bson>
protected <S> S read(TypeInformation<S> type, org.bson.conversions.Bson bson)
protected <S> S readDocument(MappingMongoConverter.ConversionContext context, org.bson.conversions.Bson bson, TypeInformation<? extends S> typeHint)
document
. Can be overridden by subclasses.context
- must not be nullbson
- must not be nulltypeHint
- the TypeInformation
to be used to unmarshall this Document
.public com.mongodb.DBRef toDBRef(Object object, @Nullable MongoPersistentProperty referringProperty)
MongoWriter
DBRef
to refer to the given object.toDBRef
in interface MongoWriter<Object>
object
- the object to create a DBRef
to link to. The object's type has to carry an id attribute.referringProperty
- the client-side property referring to the object which might carry additional metadata for
the DBRef
object to create. Can be null.public DocumentPointer toDocumentPointer(Object source, @Nullable MongoPersistentProperty referringProperty)
MongoWriter
DocumentPointer
representing the link to another entity.toDocumentPointer
in interface MongoWriter<Object>
source
- the object to create a document link to.referringProperty
- the client-side property referring to the object which might carry additional metadata for
the DBRef
object to create. Can be null.public void write(Object obj, org.bson.conversions.Bson bson)
Document
. Shouldn't be called for
nested conversions.write
in interface EntityWriter<Object,org.bson.conversions.Bson>
EntityWriter.write(java.lang.Object, java.lang.Object)
protected void writeInternal(@Nullable Object obj, org.bson.conversions.Bson bson, @Nullable TypeInformation<?> typeHint)
protected void writeInternal(@Nullable Object obj, org.bson.conversions.Bson bson, @Nullable MongoPersistentEntity<?> entity)
protected void writePropertyInternal(@Nullable Object obj, org.springframework.data.mongodb.core.convert.DocumentAccessor accessor, MongoPersistentProperty prop)
protected List<Object> createCollection(Collection<?> collection, MongoPersistentProperty property)
Collection
using the given MongoPersistentProperty
information.collection
- must not be null.property
- must not be null.protected org.bson.conversions.Bson createMap(Map<Object,Object> map, MongoPersistentProperty property)
Map
using the given MongoPersistentProperty
information.map
- must not null.property
- must not be null.protected org.bson.conversions.Bson writeMapInternal(Map<Object,Object> obj, org.bson.conversions.Bson bson, TypeInformation<?> propertyType)
obj
- must not be null.bson
- must not be null.propertyType
- must not be null.protected String potentiallyEscapeMapKey(String source)
source
- must not be null.setMapKeyDotReplacement(String)
protected String potentiallyUnescapeMapKey(String source)
source
- must not be null.protected void addCustomTypeKeyIfNecessary(@Nullable TypeInformation<?> type, Object value, org.bson.conversions.Bson bson)
Document
if necessary. That is if the value is not the same as
the one given. This is usually the case if you store a subtype of the actual declared type of the property.type
- can be null.value
- must not be null.bson
- must not be null.protected Object getPotentiallyConvertedSimpleRead(Object value, TypeInformation<?> target)
Enum
handling or returns the value as is. Can be overridden by subclasses.protected com.mongodb.DBRef createDBRef(Object target, @Nullable MongoPersistentProperty property)
protected Object readCollectionOrArray(MappingMongoConverter.ConversionContext context, Collection<?> source, TypeInformation<?> targetType)
Collection
into a collection of the given TypeInformation
. Can be overridden by
subclasses.context
- must not be nullsource
- must not be nulltargetType
- the Map
TypeInformation
to be used to unmarshall this Document
.Collection
or array, will never be null.@Deprecated protected Map<Object,Object> readMap(TypeInformation<?> type, org.bson.conversions.Bson bson, org.springframework.data.mongodb.core.convert.ObjectPath path)
readMap(ConversionContext, Bson, TypeInformation)
instead.type
- the Map
TypeInformation
to be used to unmarshall this Document
.bson
- must not be nullpath
- must not be nullprotected Map<Object,Object> readMap(MappingMongoConverter.ConversionContext context, org.bson.conversions.Bson bson, TypeInformation<?> targetType)
Document
into a Map
. will recursively resolve nested Map
s as well. Can be
overridden by subclasses.context
- must not be nullbson
- must not be nulltargetType
- the Map
TypeInformation
to be used to unmarshall this Document
.Map
, will never be null.@Nullable public Object convertToMongoType(@Nullable Object obj, @Nullable TypeInformation<?> typeInformation)
MongoWriter
TypeInformation
differs from the given object type.convertToMongoType
in interface MongoWriter<Object>
obj
- can be null.typeInformation
- can be null.public Object convertToMongoType(@Nullable Object obj, MongoPersistentEntity entity)
convertToMongoType
in interface MongoWriter<Object>
public List<Object> maybeConvertList(Iterable<?> source, @Nullable TypeInformation<?> typeInformation)
protected <T> T maybeCallAfterConvert(T object, org.bson.Document document, String collection)
public Class<?> getWriteTarget(Class<?> source)
source
- must not be null.public MappingMongoConverter with(MongoDatabaseFactory dbFactory)
MappingMongoConverter
. Never null.Copyright © 2011–2022 Pivotal Software, Inc.. All rights reserved.