From cb291c844ed974a9040d7a9e7943f65ec0d17c35 Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 8 Jun 2020 18:17:32 -0700 Subject: [PATCH] Enable JSON data formatting on export. Resolves gh-89. --- .../data/json/JsonCacheDataImporterExporter.java | 12 ++++++------ .../support/JacksonObjectToJsonConverter.java | 2 ++ ...sonCacheDataImporterExporterIntegrationTests.java | 4 ++-- .../JSONFormatterPdxToJsonConverterUnitTests.java | 2 +- .../JacksonObjectToJsonConverterUnitTests.java | 4 ++++ 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/spring-geode/src/main/java/org/springframework/geode/data/json/JsonCacheDataImporterExporter.java b/spring-geode/src/main/java/org/springframework/geode/data/json/JsonCacheDataImporterExporter.java index b3bb1c20..878a3f0c 100644 --- a/spring-geode/src/main/java/org/springframework/geode/data/json/JsonCacheDataImporterExporter.java +++ b/spring-geode/src/main/java/org/springframework/geode/data/json/JsonCacheDataImporterExporter.java @@ -96,11 +96,11 @@ public class JsonCacheDataImporterExporter extends AbstractCacheDataImporterExpo protected static final String NO_FIELD_NAME = ""; protected static final String RESOURCE_NAME_PATTERN = "data-%s.json"; - private JsonToPdxConverter toPdxConverter = newJsonToPdxConverter(); + private JsonToPdxConverter jsonToPdxConverter = newJsonToPdxConverter(); - private JsonToPdxArrayConverter toPdxArrayConverter = newJsonToPdxArrayConverter(); + private JsonToPdxArrayConverter jsonToPdxArrayConverter = newJsonToPdxArrayConverter(); - private ObjectToJsonConverter toJsonConverter = newObjectToJsonConverter(); + private ObjectToJsonConverter objectToJsonConverter = newObjectToJsonConverter(); // TODO configure via an SPI private @NonNull JsonToPdxConverter newJsonToPdxConverter() { @@ -124,7 +124,7 @@ public class JsonCacheDataImporterExporter extends AbstractCacheDataImporterExpo * @see org.springframework.geode.data.json.converter.JsonToPdxConverter */ protected @NonNull JsonToPdxConverter getJsonToPdxConverter() { - return this.toPdxConverter; + return this.jsonToPdxConverter; } /** @@ -134,7 +134,7 @@ public class JsonCacheDataImporterExporter extends AbstractCacheDataImporterExpo * @see org.springframework.geode.data.json.converter.JsonToPdxArrayConverter */ protected @NonNull JsonToPdxArrayConverter getJsonToPdxArrayConverter() { - return this.toPdxArrayConverter; + return this.jsonToPdxArrayConverter; } /** @@ -144,7 +144,7 @@ public class JsonCacheDataImporterExporter extends AbstractCacheDataImporterExpo * @see org.springframework.geode.data.json.converter.ObjectToJsonConverter */ protected @NonNull ObjectToJsonConverter getObjectToJsonConverter() { - return this.toJsonConverter; + return this.objectToJsonConverter; } /** diff --git a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverter.java b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverter.java index b07b29a0..1b92d400 100644 --- a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverter.java +++ b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverter.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.TypeDescriptor; @@ -103,6 +104,7 @@ public class JacksonObjectToJsonConverter implements ObjectToJsonConverter { .addMixIn(target.getClass(), ObjectTypeMetadataMixin.class) .configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true) .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true) + .configure(SerializationFeature.INDENT_OUTPUT, true) .findAndRegisterModules(); } diff --git a/spring-geode/src/test/java/org/springframework/geode/data/json/JsonCacheDataImporterExporterIntegrationTests.java b/spring-geode/src/test/java/org/springframework/geode/data/json/JsonCacheDataImporterExporterIntegrationTests.java index 09778fa3..63074326 100644 --- a/spring-geode/src/test/java/org/springframework/geode/data/json/JsonCacheDataImporterExporterIntegrationTests.java +++ b/spring-geode/src/test/java/org/springframework/geode/data/json/JsonCacheDataImporterExporterIntegrationTests.java @@ -366,9 +366,9 @@ public class JsonCacheDataImporterExporterIntegrationTests extends IntegrationTe closeApplicationContext(); - String actualJson = writer.toString(); + String actualJson = StringUtils.trimAllWhitespace(writer.toString()); - String expectedJson = String.format("[{\"@type\":\"%s\",\"id\":42,\"name\":\"Play Doe\"}]", + String expectedJson = String.format("[{\"@type\":\"%s\",\"id\":42,\"name\":\"PlayDoe\"}]", playDoe.getClass().getName()); assertThat(actualJson).isEqualTo(expectedJson); diff --git a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java index 7161b6d2..fe329355 100644 --- a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java +++ b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java @@ -281,7 +281,7 @@ public class JSONFormatterPdxToJsonConverterUnitTests { public void decorateJsonForReal() { String json = "{ \"name\": \"Jon Doe\" }"; - String expectedJson = String.format("{\"name\":\"Jon Doe\",\"%s\":\"%s\"}", + String expectedJson = String.format("{\n \"name\" : \"Jon Doe\",\n \"%s\" : \"%s\"\n}", JSONFormatterPdxToJsonConverter.AT_TYPE_METADATA_PROPERTY_NAME, Customer.class.getName()); PdxInstance mockPdxInstance = mock(PdxInstance.class); diff --git a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverterUnitTests.java b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverterUnitTests.java index c21844e7..775b8b80 100644 --- a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverterUnitTests.java +++ b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JacksonObjectToJsonConverterUnitTests.java @@ -33,6 +33,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import org.junit.Test; @@ -150,6 +151,7 @@ public class JacksonObjectToJsonConverterUnitTests { doReturn(mockObjectMapper).when(mockObjectMapper).addMixIn(any(), any()); doReturn(mockObjectMapper).when(mockObjectMapper).configure(any(JsonGenerator.Feature.class), anyBoolean()); doReturn(mockObjectMapper).when(mockObjectMapper).configure(any(MapperFeature.class), anyBoolean()); + doReturn(mockObjectMapper).when(mockObjectMapper).configure(any(SerializationFeature.class), anyBoolean()); doReturn(mockObjectMapper).when(mockObjectMapper).findAndRegisterModules(); ObjectMapper objectMapper = converter.newObjectMapper(target); @@ -164,6 +166,8 @@ public class JacksonObjectToJsonConverterUnitTests { .configure(eq(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN), eq(true)); verify(mockObjectMapper, times(1)) .configure(eq(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY), eq(true)); + verify(mockObjectMapper, times(1)) + .configure(eq(SerializationFeature.INDENT_OUTPUT), eq(true)); verify(mockObjectMapper, times(1)).findAndRegisterModules(); verifyNoMoreInteractions(mockObjectMapper); }