Skip to content

Commit 3d4dfe9

Browse files
christophstroblmp911de
authored andcommitted
think about it
1 parent 8c1d742 commit 3d4dfe9

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,11 @@ public <T> T getPropertyValue(MongoPersistentProperty property) {
987987
dbRefObj = proxy.toDBRef();
988988
}
989989

990+
if(obj !=null && conversions.hasCustomWriteTarget(obj.getClass())) {
991+
accessor.withCheckFieldMapping(true).put(prop, doConvert(obj, conversions.getCustomWriteTarget(obj.getClass()).get()));
992+
return;
993+
}
994+
990995
dbRefObj = dbRefObj != null ? dbRefObj : createDBRef(obj, prop);
991996

992997
accessor.put(prop, dbRefObj);

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2735,6 +2735,44 @@ void shouldWriteComplexPropertyCorrectlyAfterConversionReturnsNull() {
27352735
assertThat(document).containsEntry("writeAlwaysPerson", null).doesNotContainKey("writeNonNullPerson");
27362736
}
27372737

2738+
@Test // GH-4710
2739+
void shouldDelegateWriteOfDBRefToCustomConversionIfConfigured() {
2740+
2741+
MongoCustomConversions conversions = new MongoCustomConversions(ConverterBuilder.writing(Person.class, DBRef.class, it -> new DBRef("persons", "n/a")).andReading(it -> null).getConverters().stream().toList());
2742+
2743+
converter = new MappingMongoConverter(resolver, mappingContext);
2744+
converter.setCustomConversions(conversions);
2745+
converter.afterPropertiesSet();
2746+
2747+
WithFieldWrite fieldWrite = new WithFieldWrite();
2748+
fieldWrite.writeAlwaysPersonDBRef = new Person();
2749+
fieldWrite.writeNonNullPersonDBRef = new Person();
2750+
2751+
org.bson.Document document = new org.bson.Document();
2752+
converter.write(fieldWrite, document);
2753+
2754+
assertThat(document).containsEntry("writeAlwaysPersonDBRef", new DBRef("persons", "n/a"));//.doesNotContainKey("writeNonNullPersonDBRef");
2755+
}
2756+
2757+
@Test // GH-4710
2758+
void shouldDelegateWriteOfDBRefToCustomConversionIfConfiguredAndCheckNulls() {
2759+
2760+
MongoCustomConversions conversions = new MongoCustomConversions(ConverterBuilder.writing(Person.class, DBRef.class, it -> null).andReading(it -> null).getConverters().stream().toList());
2761+
2762+
converter = new MappingMongoConverter(resolver, mappingContext);
2763+
converter.setCustomConversions(conversions);
2764+
converter.afterPropertiesSet();
2765+
2766+
WithFieldWrite fieldWrite = new WithFieldWrite();
2767+
fieldWrite.writeAlwaysPersonDBRef = new Person();
2768+
fieldWrite.writeNonNullPersonDBRef = new Person();
2769+
2770+
org.bson.Document document = new org.bson.Document();
2771+
converter.write(fieldWrite, document);
2772+
2773+
assertThat(document).containsEntry("writeAlwaysPersonDBRef", null).doesNotContainKey("writeNonNullPersonDBRef");
2774+
}
2775+
27382776
@Test // GH-3686
27392777
void readsCollectionContainingNullValue() {
27402778

0 commit comments

Comments
 (0)