Browse Source

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.
pull/658/head
Oliver Drotbohm 7 years ago
parent
commit
ec50d96d23
No known key found for this signature in database
GPG Key ID: 6E42B5787543F690
  1. 5
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java
  2. 16
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoConvertersUnitTests.java

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

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

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

@ -18,6 +18,7 @@ package org.springframework.data.mongodb.core.convert;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.net.URI;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Currency; import java.util.Currency;
@ -28,6 +29,8 @@ import org.assertj.core.data.TemporalUnitLessThanOffset;
import org.bson.BsonTimestamp; import org.bson.BsonTimestamp;
import org.bson.Document; import org.bson.Document;
import org.junit.Test; 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.Box;
import org.springframework.data.geo.Circle; import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Point; import org.springframework.data.geo.Point;
@ -156,4 +159,17 @@ public class MongoConvertersUnitTests {
.isCloseTo(Instant.ofEpochSecond(1540384327), new TemporalUnitLessThanOffset(100, ChronoUnit.MILLIS)); .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"));
}
} }

Loading…
Cancel
Save