DATAMONGO-2210 - Add support to persist URI instances out of the box.

We now register Converter implementations that persist a URI as String by default to avoid the reflection inspection of URI instances.
This commit is contained in:
Oliver Drotbohm
2019-03-05 15:22:27 +01:00
parent 3c8d84439e
commit ec50d96d23
2 changed files with 21 additions and 0 deletions

View File

@@ -15,9 +15,12 @@
*/
package org.springframework.data.mongodb.core.convert;
import static org.springframework.data.convert.ConverterBuilder.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.time.Instant;
import java.util.ArrayList;
@@ -90,6 +93,8 @@ abstract class MongoConverters {
converters.add(BinaryToByteArrayConverter.INSTANCE);
converters.add(BsonTimestampToInstantConverter.INSTANCE);
converters.add(reading(String.class, URI.class, URI::create).andWriting(URI::toString));
return converters;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.data.mongodb.core.convert;
import static org.assertj.core.api.Assertions.*;
import java.math.BigDecimal;
import java.net.URI;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Currency;
@@ -28,6 +29,8 @@ import org.assertj.core.data.TemporalUnitLessThanOffset;
import org.bson.BsonTimestamp;
import org.bson.Document;
import org.junit.Test;
import org.springframework.core.convert.support.ConfigurableConversionService;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.data.geo.Box;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Point;
@@ -156,4 +159,17 @@ public class MongoConvertersUnitTests {
.isCloseTo(Instant.ofEpochSecond(1540384327), new TemporalUnitLessThanOffset(100, ChronoUnit.MILLIS));
}
@Test // DATAMONGO-2210
public void convertsUrisToString() {
MongoCustomConversions conversions = new MongoCustomConversions();
assertThat(conversions.getSimpleTypeHolder().isSimpleType(URI.class)).isTrue();
ConfigurableConversionService conversionService = new DefaultConversionService();
conversions.registerConvertersIn(conversionService);
assertThat(conversionService.convert(URI.create("/segment"), String.class)).isEqualTo("/segment");
assertThat(conversionService.convert("/segment", URI.class)).isEqualTo(URI.create("/segment"));
}
}