diff --git a/src/main/java/org/springframework/data/mapping/context/DefaultPersistentPropertyPath.java b/src/main/java/org/springframework/data/mapping/context/DefaultPersistentPropertyPath.java index 0fa6b2348f..94239f7551 100644 --- a/src/main/java/org/springframework/data/mapping/context/DefaultPersistentPropertyPath.java +++ b/src/main/java/org/springframework/data/mapping/context/DefaultPersistentPropertyPath.java @@ -93,10 +93,15 @@ public String toPath(String delimiter, Converter converter) { List result = new ArrayList(); for (T property : properties) { - result.add(converterToUse.convert(property)); + + String convert = converterToUse.convert(property); + + if (StringUtils.hasText(convert)) { + result.add(convert); + } } - return StringUtils.collectionToDelimitedString(result, delimiterToUse); + return result.isEmpty() ? null : StringUtils.collectionToDelimitedString(result, delimiterToUse); } /* diff --git a/src/test/java/org/springframework/data/mapping/context/DefaultPersistenPropertyPathUnitTests.java b/src/test/java/org/springframework/data/mapping/context/DefaultPersistenPropertyPathUnitTests.java index b39006880d..66607e171d 100644 --- a/src/test/java/org/springframework/data/mapping/context/DefaultPersistenPropertyPathUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/context/DefaultPersistenPropertyPathUnitTests.java @@ -38,11 +38,9 @@ @RunWith(MockitoJUnitRunner.class) public class DefaultPersistenPropertyPathUnitTests> { - @Mock - T first, second; + @Mock T first, second; - @Mock - Converter converter; + @Mock Converter converter; PersistentPropertyPath oneLeg; PersistentPropertyPath twoLegs; @@ -121,4 +119,39 @@ public void pathReturnsCorrectSize() { assertThat(oneLeg.getLength(), is(1)); assertThat(twoLegs.getLength(), is(2)); } + + /** + * @see DATACMNS-444 + */ + @Test + public void skipsMappedPropertyNameIfConverterReturnsNull() { + + String result = twoLegs.toDotPath(new Converter() { + + @Override + public String convert(T source) { + return null; + } + }); + + assertThat(result, is(nullValue())); + } + + /** + * @see DATACMNS-444 + */ + @Test + public void skipsMappedPropertyNameIfConverterReturnsEmptyStrings() { + + String result = twoLegs.toDotPath(new Converter() { + + @Override + public String convert(T source) { + return ""; + } + }); + + assertThat(result, is(nullValue())); + } + }