DATAREDIS-492 - Handle serializing arrays and collections.

Original Pull Request: #189
This commit is contained in:
Greg Turnquist
2016-04-11 16:20:54 -05:00
committed by Christoph Strobl
parent deec98efc6
commit 2492fbe332
3 changed files with 95 additions and 8 deletions

View File

@@ -43,6 +43,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -75,6 +76,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
/**
* @author Christoph Strobl
* @author Greg Turnquist
*/
@RunWith(MockitoJUnitRunner.class)
public class MappingRedisConverterUnitTests {
@@ -146,7 +148,7 @@ public class MappingRedisConverterUnitTests {
* @see DATAREDIS-425
*/
@Test
public void writeDoesNotAppendPropertiesWithEmtpyCollections() {
public void writeDoesNotAppendPropertiesWithEmptyCollections() {
rand.firstname = "rand";
@@ -435,6 +437,27 @@ public class MappingRedisConverterUnitTests {
.containingUtf8String("physicalAttributes.[eye-color]", "grey"));
}
/**
* @see DATAREDIS-492
*/
@Test
public void writeHandlesArraysProperly() {
this.converter = new MappingRedisConverter(null, null, resolverMock);
this.converter
.setCustomConversions(new CustomConversions(Collections.singletonList(new ListToByteConverter())));
this.converter.afterPropertiesSet();
Map<String, Object> innerMap = new LinkedHashMap<String, Object>();
innerMap.put("address", "tyrionl@netflix.com");
innerMap.put("when", new String[]{"pipeline.failed"});
Map<String, Object> map = new LinkedHashMap<String, Object>();
map.put("email", Collections.singletonList(innerMap));
RedisData target = write(map);
}
/**
* @see DATAREDIS-425
*/
@@ -1375,6 +1398,35 @@ public class MappingRedisConverterUnitTests {
}
}
@WritingConverter
static class ListToByteConverter implements Converter<List, byte[]> {
private final ObjectMapper mapper;
private final Jackson2JsonRedisSerializer<List> serializer;
ListToByteConverter() {
mapper = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(Visibility.ANY).withGetterVisibility(Visibility.NONE)
.withSetterVisibility(Visibility.NONE).withCreatorVisibility(Visibility.NONE));
serializer = new Jackson2JsonRedisSerializer<List>(List.class);
serializer.setObjectMapper(mapper);
}
@Override
public byte[] convert(List source) {
if (source == null || source.isEmpty()) {
return null;
}
return serializer.serialize(source);
}
}
@ReadingConverter
static class MapToSpeciesConverter implements Converter<Map<String, byte[]>, Species> {