diff --git a/pom.xml b/pom.xml
index d395a08985..7cd60c8768 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-commons
- 2.5.0-SNAPSHOT
+ 2.5.0-DATAJDBC-1836-SNAPSHOT
Spring Data Core
diff --git a/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java b/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java
index ed3157011b..bb74cec7b6 100644
--- a/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java
+++ b/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java
@@ -28,6 +28,7 @@
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.core.convert.support.GenericConversionService;
+import org.springframework.data.convert.Jsr310Converters;
import org.springframework.data.util.NullableWrapperConverters;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -43,6 +44,7 @@
* @author Oliver Gierke
* @author Christoph Strobl
* @author Mark Paluch
+ * @author Jens Schauder
* @see SpelAwareProxyProjectionFactory
* @since 1.10
*/
@@ -51,6 +53,7 @@ class ProxyProjectionFactory implements ProjectionFactory, BeanClassLoaderAware
final static GenericConversionService CONVERSION_SERVICE = new DefaultConversionService();
static {
+ Jsr310Converters.getConvertersToRegister().forEach(CONVERSION_SERVICE::addConverter);
NullableWrapperConverters.registerConvertersIn(CONVERSION_SERVICE);
CONVERSION_SERVICE.removeConvertible(Object.class, Object.class);
}
diff --git a/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java b/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java
index 23a05effb5..64480b9eb0 100755
--- a/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java
+++ b/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java
@@ -19,7 +19,11 @@
import java.beans.PropertyDescriptor;
import java.lang.reflect.Proxy;
+import java.time.LocalDateTime;
+import java.util.Calendar;
import java.util.Collections;
+import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -37,6 +41,7 @@
* @author Oliver Gierke
* @author Wim Deblauwe
* @author Mark Paluch
+ * @author Jens Schauder
*/
class ProxyProjectionFactoryUnitTests {
@@ -276,17 +281,30 @@ void supportsOptionalWithProjectionAsReturnTypeIfPresent() {
});
}
+ @Test // DATACMNS-1836
+ void supportsDateToLocalDateTimeConversion() {
+
+ Customer customer = new Customer();
+ customer.firstname = "Dave";
+ customer.dob = new GregorianCalendar(1967, Calendar.JANUARY, 9).getTime();
+
+ customer.address = new Address();
+ customer.address.city = "New York";
+ customer.address.zipCode = "ZIP";
+
+ CustomerWithLocalDateTime excerpt = factory.createProjection(CustomerWithLocalDateTime.class, customer);
+
+ assertThat(excerpt.getFirstname()).isEqualTo("Dave");
+ assertThat(excerpt.getDob()).isEqualTo(LocalDateTime.of(1967, 1, 9, 0, 0));
+
+ }
+
interface Contact {}
- static class Customer implements Contact {
+ interface CustomerWithLocalDateTime {
+ String getFirstname();
- Long id;
- String firstname, lastname;
- Address address;
- byte[] picture;
- Address[] shippingAddresses;
- Map data;
- Optional optional;
+ LocalDateTime getDob();
}
static class Address {
@@ -336,4 +354,16 @@ interface CustomerWithOptionalHavingProjection {
Optional getAddress();
}
+
+ static class Customer implements Contact {
+
+ Long id;
+ String firstname, lastname;
+ Date dob;
+ Address address;
+ byte[] picture;
+ Address[] shippingAddresses;
+ Map data;
+ Optional optional;
+ }
}