Browse Source

DATAMONGO-2043 - Omit type hint when mapping simple types.

Original pull request: #589.
pull/662/head
Christoph Strobl 7 years ago committed by Mark Paluch
parent
commit
47f9e3c739
  1. 15
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
  2. 9
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

15
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java

@ -351,10 +351,9 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App @@ -351,10 +351,9 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App
}
Class<?> entityType = obj.getClass();
boolean handledByCustomConverter = conversions.getCustomWriteTarget(entityType, DBObject.class) != null;
TypeInformation<? extends Object> type = ClassTypeInformation.from(entityType);
if (!handledByCustomConverter && !(dbo instanceof BasicDBList)) {
if (requiresTypeHint(entityType)) {
typeMapper.writeType(type, dbo);
}
@ -363,6 +362,18 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App @@ -363,6 +362,18 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App
writeInternal(target, dbo, type);
}
/**
* Check if a given type requires a type hint {@literal aka _class attribute} when writing to the document.
*
* @param type must not be {@literal null}.
* @return true if not a simple type, collection or type with custom write target.
*/
private boolean requiresTypeHint(Class<?> type) {
return !conversions.isSimpleType(type) && !ClassUtils.isAssignable(Collection.class, type)
&& !conversions.hasCustomWriteTarget(type, DBObject.class);
}
/**
* Internal write conversion method which should be used for nested invocations.
*

9
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

@ -1853,6 +1853,15 @@ public class MappingMongoConverterUnitTests { @@ -1853,6 +1853,15 @@ public class MappingMongoConverterUnitTests {
assertThat(converter.read(Attribute.class, source).value, is(instanceOf(List.class)));
}
@Test // DATAMONGO-2043
public void omitsTypeHintWhenWritingSimpleTypes() {
DBObject target = new BasicDBObject();
converter.write(new BasicDBObject("value", "FitzChivalry"), target);
assertThat(target.get("_class"), is(nullValue()));
}
static class GenericType<T> {
T content;
}

Loading…
Cancel
Save