diff --git a/src/main/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentProperty.java b/src/main/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentProperty.java index 73cb0c55..f4a5e27e 100644 --- a/src/main/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentProperty.java +++ b/src/main/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentProperty.java @@ -73,6 +73,11 @@ public class BasicCouchbasePersistentProperty extends AnnotationBasedPersistentP */ @Override public String getFieldName() { + Field annotationField = getField().getAnnotation(Field.class); + + if (annotationField != null && StringUtils.hasText(annotationField.value())) { + return annotationField.value(); + } JsonProperty annotation = getField().getAnnotation(JsonProperty.class); if (annotation != null && StringUtils.hasText(annotation.value())) { diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index 325f0801..906908a8 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -411,6 +411,54 @@ public class MappingCouchbaseConverterTests { assertThat(readConverted.mapOfValues.get("val2")).isEqualTo(mapOfValues.get("val2")); } + @Test + void writesAndReadsCustomFieldsConvertedClass() { + List converters = new ArrayList<>(); + converters.add(BigDecimalToStringConverter.INSTANCE); + converters.add(StringToBigDecimalConverter.INSTANCE); + converter.setCustomConversions(new CouchbaseCustomConversions(converters)); + converter.afterPropertiesSet(); + + CouchbaseDocument converted = new CouchbaseDocument(); + + final String valueStr = "12.345"; + final BigDecimal value = new BigDecimal(valueStr); + final String value2Str = "0.6789"; + final BigDecimal value2 = new BigDecimal(value2Str); + List listOfValues = new ArrayList<>(); + listOfValues.add(value); + listOfValues.add(value2); + Map mapOfValues = new HashMap<>(); + mapOfValues.put("val1", value); + mapOfValues.put("val2", value2); + + CustomFieldsEntity entity = new CustomFieldsEntity(value, listOfValues, mapOfValues); + converter.write(entity, converted); + + CouchbaseDocument source = new CouchbaseDocument(); + source.put("_class", CustomFieldsEntity.class.getName()); + source.put("decimalValue", valueStr); + CouchbaseList listOfValuesDoc = new CouchbaseList(); + listOfValuesDoc.put(valueStr); + listOfValuesDoc.put(value2Str); + source.put("listOfDecimalValues", listOfValuesDoc); + CouchbaseDocument mapOfValuesDoc = new CouchbaseDocument(); + mapOfValuesDoc.put("val1", valueStr); + mapOfValuesDoc.put("val2", value2Str); + source.put("mapOfDecimalValues", mapOfValuesDoc); + + assertThat(valueStr).isEqualTo(((CouchbaseList) converted.getContent().get("listOfDecimalValues")).get(0)); + assertThat(value2Str).isEqualTo(((CouchbaseList) converted.getContent().get("listOfDecimalValues")).get(1)); + assertThat(converted.export().toString()).isEqualTo(source.export().toString()); + + CustomFieldsEntity readConverted = converter.read(CustomFieldsEntity.class, source); + assertThat(readConverted.value).isEqualTo(value); + assertThat(readConverted.listOfValues.get(0)).isEqualTo(listOfValues.get(0)); + assertThat(readConverted.listOfValues.get(1)).isEqualTo(listOfValues.get(1)); + assertThat(readConverted.mapOfValues.get("val1")).isEqualTo(mapOfValues.get("val1")); + assertThat(readConverted.mapOfValues.get("val2")).isEqualTo(mapOfValues.get("val2")); + } + @Test void writesAndReadsClassContainingCustomConvertedObjects() { List converters = new ArrayList<>(); @@ -621,6 +669,17 @@ public class MappingCouchbaseConverterTests { } } + static class CustomFieldsEntity extends BaseEntity { + @Field("decimalValue") private BigDecimal value; + @Field("listOfDecimalValues") private List listOfValues; + @Field("mapOfDecimalValues") private Map mapOfValues; + public CustomFieldsEntity(BigDecimal value, List listOfValues, Map mapOfValues) { + this.value = value; + this.listOfValues = listOfValues; + this.mapOfValues = mapOfValues; + } + } + static class CustomObjectEntity extends BaseEntity { private CustomObject object; private List listOfObjects;