diff --git a/src/main/asciidoc/appendix/conversions.adoc b/src/main/asciidoc/appendix/conversions.adoc index 13cd5ce2a..f758546a7 100644 --- a/src/main/asciidoc/appendix/conversions.adoc +++ b/src/main/asciidoc/appendix/conversions.adoc @@ -165,6 +165,14 @@ If you require the time zone, use a type that supports it (i.e. `ZoneDateTime`) |List of String (The name value of the enum) | +|java.net.URL +|String +| + +|java.net.URI +|String +| + |=== == Custom conversions diff --git a/src/main/java/org/springframework/data/neo4j/core/convert/AdditionalTypes.java b/src/main/java/org/springframework/data/neo4j/core/convert/AdditionalTypes.java index 5b0112580..feb4ccddf 100644 --- a/src/main/java/org/springframework/data/neo4j/core/convert/AdditionalTypes.java +++ b/src/main/java/org/springframework/data/neo4j/core/convert/AdditionalTypes.java @@ -19,6 +19,7 @@ import java.lang.reflect.Array; 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.time.ZoneOffset; @@ -92,6 +93,7 @@ final class AdditionalTypes { hlp.add(ConverterBuilder.reading(Value.class, Instant.class, AdditionalTypes::asInstant).andWriting(AdditionalTypes::value)); hlp.add(ConverterBuilder.reading(Value.class, UUID.class, AdditionalTypes::asUUID).andWriting(AdditionalTypes::value)); hlp.add(ConverterBuilder.reading(Value.class, URL.class, AdditionalTypes::asURL).andWriting(AdditionalTypes::value)); + hlp.add(ConverterBuilder.reading(Value.class, URI.class, AdditionalTypes::asURI).andWriting(AdditionalTypes::value)); CONVERTERS = Collections.unmodifiableList(hlp); } @@ -124,6 +126,17 @@ final class AdditionalTypes { return Values.value(url.toString()); } + static URI asURI(Value value) { + return URI.create(value.asString()); + } + + static Value value(URI uri) { + if (uri == null) { + return Values.NULL; + } + return Values.value(uri.toString()); + } + static Instant asInstant(Value value) { return value.asZonedDateTime().toInstant(); } diff --git a/src/test/java/org/springframework/data/neo4j/integration/shared/Neo4jConversionsITBase.java b/src/test/java/org/springframework/data/neo4j/integration/shared/Neo4jConversionsITBase.java index f8acc6314..b228dfec9 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/shared/Neo4jConversionsITBase.java +++ b/src/test/java/org/springframework/data/neo4j/integration/shared/Neo4jConversionsITBase.java @@ -20,6 +20,7 @@ import lombok.Builder; import java.math.BigDecimal; import java.math.BigInteger; import java.net.MalformedURLException; +import java.net.URI; import java.net.URL; import java.time.Duration; import java.time.Instant; @@ -114,6 +115,7 @@ public abstract class Neo4jConversionsITBase { } catch (MalformedURLException e) { throw new RuntimeException(e); } + hlp.put("aURI", URI.create("urn:isbn:9783864905254")); hlp.put("anEnum", SomeEnum.TheUsualMisfit); hlp.put("anArrayOfEnums", new SomeEnum[] { SomeEnum.ValueA, SomeEnum.ValueB }); hlp.put("aCollectionOfEnums", Arrays.asList(SomeEnum.ValueC, SomeEnum.TheUsualMisfit)); @@ -217,6 +219,7 @@ public abstract class Neo4jConversionsITBase { + " n.anInstant = datetime('2019-09-26T20:34:23Z')," + " n.aUUID = 'd4ec9208-4b17-4ec7-a709-19a5e53865a8'," + " n.listOfDoubles = [1.0]," + " n.aURL = 'https://www.test.com'," + + " n.aURI = 'urn:isbn:9783864905254'," + " n.anEnum = 'TheUsualMisfit'," + " n.anArrayOfEnums = ['ValueA', 'ValueB']," + " n.aCollectionOfEnums = ['ValueC', 'TheUsualMisfit']" + " RETURN id(n) AS id", parameters) .single().get("id").asLong(); diff --git a/src/test/java/org/springframework/data/neo4j/integration/shared/ThingWithAllAdditionalTypes.java b/src/test/java/org/springframework/data/neo4j/integration/shared/ThingWithAllAdditionalTypes.java index 4a0729d64..5860c63d6 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/shared/ThingWithAllAdditionalTypes.java +++ b/src/test/java/org/springframework/data/neo4j/integration/shared/ThingWithAllAdditionalTypes.java @@ -23,6 +23,7 @@ import lombok.With; import java.math.BigDecimal; import java.math.BigInteger; +import java.net.URI; import java.net.URL; import java.time.Duration; import java.time.Instant; @@ -102,6 +103,8 @@ public class ThingWithAllAdditionalTypes { private URL aURL; + private URI aURI; + private SomeEnum anEnum; private SomeEnum[] anArrayOfEnums;