diff --git a/src/main/java/org/springframework/data/mapping/PersistentProperty.java b/src/main/java/org/springframework/data/mapping/PersistentProperty.java index 244629338..e8c52f0c1 100644 --- a/src/main/java/org/springframework/data/mapping/PersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/PersistentProperty.java @@ -97,7 +97,7 @@ public interface PersistentProperty
> { Method getter = getGetter(); if (getter == null) { - throw new IllegalArgumentException("No getter available for this persistent property!"); + throw new IllegalArgumentException(String.format("No getter available for persistent property %s!", this)); } return getter; @@ -117,7 +117,7 @@ public interface PersistentProperty
> { Method setter = getSetter(); if (setter == null) { - throw new IllegalArgumentException("No setter available for this persistent property!"); + throw new IllegalArgumentException(String.format("No setter available for persistent property %s!", this)); } return setter; @@ -131,7 +131,7 @@ public interface PersistentProperty
> { Field field = getField(); if (field == null) { - throw new IllegalArgumentException("No field backing this persistent property!"); + throw new IllegalArgumentException(String.format("No field backing persistent property %s!", this)); } return field; diff --git a/src/main/java/org/springframework/data/mapping/model/Property.java b/src/main/java/org/springframework/data/mapping/model/Property.java index f8f7f6b74..f94e16f83 100644 --- a/src/main/java/org/springframework/data/mapping/model/Property.java +++ b/src/main/java/org/springframework/data/mapping/model/Property.java @@ -64,7 +64,8 @@ public class Property { ); this.hashCode = Lazy.of(() -> withFieldOrDescriptor(Object::hashCode)); this.name = Lazy.of(() -> withFieldOrDescriptor(Field::getName, FeatureDescriptor::getName)); - this.toString = Lazy.of(() -> withFieldOrDescriptor(Object::toString)); + this.toString = Lazy.of(() -> withFieldOrDescriptor(Object::toString, + it -> String.format("%s.%s", type.getType().getName(), it.getDisplayName()))); this.getter = descriptor.map(PropertyDescriptor::getReadMethod)// .filter(it -> getType() != null)// diff --git a/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java b/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java index ae3100f4e..5ac8d1313 100755 --- a/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java @@ -239,6 +239,39 @@ public class AnnotationBasedPersistentPropertyUnitTests
property.getRequiredAnnotation(Transient.class)).isInstanceOf(IllegalStateException.class);
}
+ @Test // DATACMNS-1359
+ public void missingRequiredGetterThrowsException() {
+
+ SamplePersistentProperty property = getProperty(Sample.class, "field");
+
+ assertThatExceptionOfType(IllegalArgumentException.class) //
+ .isThrownBy(() -> property.getRequiredGetter()) //
+ .withMessageContaining("field") //
+ .withMessageContaining(Sample.class.getName());
+ }
+
+ @Test // DATACMNS-1359
+ public void missingRequiredSetterThrowsException() {
+
+ SamplePersistentProperty property = getProperty(Sample.class, "field");
+
+ assertThatExceptionOfType(IllegalArgumentException.class) //
+ .isThrownBy(() -> property.getRequiredSetter()) //
+ .withMessageContaining("field") //
+ .withMessageContaining(Sample.class.getName());
+ }
+
+ @Test
+ public void missingRequiredFieldThrowsException() {
+
+ SamplePersistentProperty property = getProperty(NoField.class, "firstname");
+
+ assertThatExceptionOfType(IllegalArgumentException.class) //
+ .isThrownBy(() -> property.getRequiredField()) //
+ .withMessageContaining("firstname") //
+ .withMessageContaining(NoField.class.getName());
+ }
+
@SuppressWarnings("unchecked")
private Map