diff --git a/core-api/src/main/java/com/optimizely/ab/config/parser/GsonConfigParser.java b/core-api/src/main/java/com/optimizely/ab/config/parser/GsonConfigParser.java index 314f2dd23..61af8e6f2 100644 --- a/core-api/src/main/java/com/optimizely/ab/config/parser/GsonConfigParser.java +++ b/core-api/src/main/java/com/optimizely/ab/config/parser/GsonConfigParser.java @@ -20,6 +20,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.ToNumberPolicy; import com.optimizely.ab.config.DatafileProjectConfig; import com.optimizely.ab.config.Experiment; import com.optimizely.ab.config.FeatureFlag; @@ -37,6 +38,7 @@ final public class GsonConfigParser implements ConfigParser { public GsonConfigParser() { this(new GsonBuilder() + .setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE) .registerTypeAdapter(Audience.class, new AudienceGsonDeserializer()) .registerTypeAdapter(TypedAudience.class, new AudienceGsonDeserializer()) .registerTypeAdapter(Experiment.class, new ExperimentGsonDeserializer()) diff --git a/core-api/src/test/java/com/optimizely/ab/config/parser/GsonConfigParserTest.java b/core-api/src/test/java/com/optimizely/ab/config/parser/GsonConfigParserTest.java index ec02aaad0..5e1dca11c 100644 --- a/core-api/src/test/java/com/optimizely/ab/config/parser/GsonConfigParserTest.java +++ b/core-api/src/test/java/com/optimizely/ab/config/parser/GsonConfigParserTest.java @@ -404,19 +404,20 @@ public void testToJson() { @Test public void testFromJson() { - String json = "{\"k1\":\"v1\",\"k2\":3.5,\"k3\":true}"; + String json = "{\"k1\":\"v1\",\"k2\":3.5,\"k3\":true,\"k4\":12345}"; Map expectedMap = new HashMap<>(); expectedMap.put("k1", "v1"); expectedMap.put("k2", 3.5); expectedMap.put("k3", true); + expectedMap.put("k4", 12345L); GsonConfigParser parser = new GsonConfigParser(); - Map map = null; + Map map = null; try { map = parser.fromJson(json, Map.class); - assertEquals(map, expectedMap); + assertEquals(expectedMap, map); } catch (JsonParseException e) { fail("Parse to map failed: " + e.getMessage()); } diff --git a/core-api/src/test/java/com/optimizely/ab/optimizelyjson/OptimizelyJSONWithGsonParserTest.java b/core-api/src/test/java/com/optimizely/ab/optimizelyjson/OptimizelyJSONWithGsonParserTest.java index ebbed4bf5..5cc7246bc 100644 --- a/core-api/src/test/java/com/optimizely/ab/optimizelyjson/OptimizelyJSONWithGsonParserTest.java +++ b/core-api/src/test/java/com/optimizely/ab/optimizelyjson/OptimizelyJSONWithGsonParserTest.java @@ -50,16 +50,16 @@ public void testGetValueWithNotMatchingType() throws JsonParseException { @Test public void testIntegerProcessing() throws JsonParseException { - // GSON parser toMap() adds ".0" to all integers + // GSON parser toMap() converts integers to longs String json = "{\"k1\":1,\"k2\":2.5,\"k3\":{\"kk1\":3,\"kk2\":4.0}}"; Map m2 = new HashMap(); - m2.put("kk1", 3.0); + m2.put("kk1", 3L); m2.put("kk2", 4.0); Map m1 = new HashMap(); - m1.put("k1", 1.0); + m1.put("k1", 1L); m1.put("k2", 2.5); m1.put("k3", m2);