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 org.slf4j.Logger |
LOGGER |
protected String |
mapKeyDotReplacement |
protected MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> |
mappingContext |
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 . |
MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> |
getMappingContext() |
protected Object |
getPotentiallyConvertedSimpleRead(Object value,
TypeInformation<?> target)
Checks whether we have a custom conversion for the given simple object.
|
MongoTypeMapper |
getTypeMapper()
Returns thw
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.
|
<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. |
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 org.slf4j.Logger 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
@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 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
.
Overrides potentially existing EntityCallbacks
.entityCallbacks
- must not be null.IllegalArgumentException
- if the given instance is null.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 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–2021 Pivotal Software, Inc.. All rights reserved.