Simplify ObjectMapper configuration.
Remove activation of default typing configuration. Change target Class type for ObjectTypeMetadataMixin (Mixin) to the (converted) source object's Class type. Remove unnecessary SimpleModule registration including the addition of the custom BigDecimalSerializer, BigIntegerSerializer and TypelessCollectionSerializer objects. Resolves gh-67.
This commit is contained in:
@@ -18,10 +18,10 @@ package org.springframework.geode.data.json.converter.support;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.isNull;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -29,12 +29,15 @@ import static org.mockito.Mockito.verify;
|
||||
import com.fasterxml.jackson.core.JsonGenerationException;
|
||||
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 org.junit.Test;
|
||||
|
||||
import org.springframework.core.convert.ConversionFailedException;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
|
||||
/**
|
||||
* Unit Tests for {@link JacksonObjectToJsonConverter}.
|
||||
*
|
||||
@@ -58,27 +61,49 @@ public class JacksonObjectToJsonConverterUnitTests {
|
||||
JacksonObjectToJsonConverter converter = spy(new JacksonObjectToJsonConverter());
|
||||
|
||||
doReturn(json).when(mockObjectMapper).writeValueAsString(eq(source));
|
||||
doReturn(mockObjectMapper).when(converter).newObjectMapper();
|
||||
doReturn(mockObjectMapper).when(converter).newObjectMapper(any());
|
||||
|
||||
assertThat(converter.convert(source)).isEqualTo(json);
|
||||
|
||||
verify(converter, times(1)).newObjectMapper();
|
||||
verify(converter, times(1)).newObjectMapper(eq(source));
|
||||
verify(mockObjectMapper, times(1)).writeValueAsString(eq(source));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void convertNullThrowsIllegalArgumentException() {
|
||||
|
||||
JacksonObjectToJsonConverter converter = spy(new JacksonObjectToJsonConverter());
|
||||
|
||||
try {
|
||||
converter.convert(null);
|
||||
}
|
||||
catch (IllegalArgumentException expected) {
|
||||
|
||||
assertThat(expected).hasMessage("Source object to convert must not be null");
|
||||
assertThat(expected).hasNoCause();
|
||||
|
||||
throw expected;
|
||||
}
|
||||
finally {
|
||||
verify(converter, never()).newObjectMapper(any());
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = ConversionFailedException.class)
|
||||
public void convertHandlesJsonProcessingException() throws JsonProcessingException {
|
||||
|
||||
Object source = new Object();
|
||||
|
||||
ObjectMapper mockObjectMapper = mock(ObjectMapper.class);
|
||||
|
||||
JacksonObjectToJsonConverter converter = spy(new JacksonObjectToJsonConverter());
|
||||
|
||||
doReturn(mockObjectMapper).when(converter).newObjectMapper();
|
||||
doReturn(mockObjectMapper).when(converter).newObjectMapper(any());
|
||||
doThrow(new JsonGenerationException("TEST", (JsonGenerator) null))
|
||||
.when(mockObjectMapper).writeValueAsString(any());
|
||||
|
||||
try {
|
||||
converter.convert(null);
|
||||
converter.convert(source);
|
||||
}
|
||||
catch (ConversionFailedException expected) {
|
||||
|
||||
@@ -89,8 +114,37 @@ public class JacksonObjectToJsonConverterUnitTests {
|
||||
throw expected;
|
||||
}
|
||||
finally {
|
||||
verify(converter, times(1)).newObjectMapper();
|
||||
verify(mockObjectMapper, times(1)).writeValueAsString(isNull());
|
||||
verify(converter, times(1)).newObjectMapper(eq(source));
|
||||
verify(mockObjectMapper, times(1)).writeValueAsString(eq(source));
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void newObjectMapperWithNullTarget() {
|
||||
|
||||
try {
|
||||
new JacksonObjectToJsonConverter().newObjectMapper(null);
|
||||
}
|
||||
catch (IllegalArgumentException expected) {
|
||||
|
||||
assertThat(expected).hasMessage("Target object must not be null");
|
||||
assertThat(expected).hasNoCause();
|
||||
|
||||
throw expected;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void newObjectMapperIsConfiguredCorrectly() {
|
||||
|
||||
Object target = Customer.newCustomer(1L, "Jon Doe");
|
||||
|
||||
ObjectMapper objectMapper = new JacksonObjectToJsonConverter().newObjectMapper(target);
|
||||
|
||||
assertThat(objectMapper).isNotNull();
|
||||
assertThat(objectMapper.isEnabled(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY)).isTrue();
|
||||
assertThat(objectMapper.isEnabled(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN)).isTrue();
|
||||
assertThat(objectMapper.getSerializationConfig().findMixInClassFor(target.getClass()))
|
||||
.isEqualTo(JacksonObjectToJsonConverter.ObjectTypeMetadataMixin.class);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user