DATACOUCH-542 - support @Field to supply a different name for a field

This commit is contained in:
mikereiche
2020-06-03 12:20:26 -07:00
parent 25e44bae87
commit dafff211a4
2 changed files with 64 additions and 0 deletions

View File

@@ -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())) {

View File

@@ -411,6 +411,54 @@ public class MappingCouchbaseConverterTests {
assertThat(readConverted.mapOfValues.get("val2")).isEqualTo(mapOfValues.get("val2"));
}
@Test
void writesAndReadsCustomFieldsConvertedClass() {
List<Object> 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<BigDecimal> listOfValues = new ArrayList<>();
listOfValues.add(value);
listOfValues.add(value2);
Map<String, BigDecimal> 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<Object> converters = new ArrayList<>();
@@ -621,6 +669,17 @@ public class MappingCouchbaseConverterTests {
}
}
static class CustomFieldsEntity extends BaseEntity {
@Field("decimalValue") private BigDecimal value;
@Field("listOfDecimalValues") private List<BigDecimal> listOfValues;
@Field("mapOfDecimalValues") private Map<String, BigDecimal> mapOfValues;
public CustomFieldsEntity(BigDecimal value, List<BigDecimal> listOfValues, Map<String, BigDecimal> mapOfValues) {
this.value = value;
this.listOfValues = listOfValues;
this.mapOfValues = mapOfValues;
}
}
static class CustomObjectEntity extends BaseEntity {
private CustomObject object;
private List<CustomObject> listOfObjects;