diff --git a/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaDeserializers.java b/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaDeserializers.java index bdfd22d..b5da614 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaDeserializers.java +++ b/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaDeserializers.java @@ -197,7 +197,9 @@ public JsonDeserializer findMapLikeDeserializer(MapLikeType type, } if (ImmutableSetMultimap.class.isAssignableFrom(raw)) { - // TODO + // [Issue#67]: Preserve order of entries + return new LinkedHashMultimapDeserializer(type, keyDeserializer, + elementTypeDeserializer, elementDeserializer); } if (HashMultimap.class.isAssignableFrom(raw)) { return new HashMultimapDeserializer(type, keyDeserializer, elementTypeDeserializer, diff --git a/src/test/java/com/fasterxml/jackson/datatype/guava/TestMultimaps.java b/src/test/java/com/fasterxml/jackson/datatype/guava/TestMultimaps.java index c7d0250..6db7908 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/guava/TestMultimaps.java +++ b/src/test/java/com/fasterxml/jackson/datatype/guava/TestMultimaps.java @@ -7,6 +7,7 @@ import com.google.common.collect.*; import java.io.IOException; +import java.util.Iterator; import java.util.Map; import static com.google.common.collect.TreeMultimap.create; @@ -235,4 +236,21 @@ private ListMultimap listBasedHelper(TypeReference type) thro assertTrue(map.containsEntry("second", "bar")); return map; } -} \ No newline at end of file + + public void testIssue67() throws IOException + { + ImmutableSetMultimap map = MAPPER.readValue( + "{\"d\":[1,2],\"c\":[3,4],\"b\":[5,6],\"a\":[7,8]}", + new TypeReference>() {}); + assertEquals(8, map.size()); + Iterator> iterator = map.entries().iterator(); + assertEquals(Maps.immutableEntry("d", 1), iterator.next()); + assertEquals(Maps.immutableEntry("d", 2), iterator.next()); + assertEquals(Maps.immutableEntry("c", 3), iterator.next()); + assertEquals(Maps.immutableEntry("c", 4), iterator.next()); + assertEquals(Maps.immutableEntry("b", 5), iterator.next()); + assertEquals(Maps.immutableEntry("b", 6), iterator.next()); + assertEquals(Maps.immutableEntry("a", 7), iterator.next()); + assertEquals(Maps.immutableEntry("a", 8), iterator.next()); + } +}