¿Cómo puedo evitar que gson convierta enteros en dobles?
Tengo enteros en mi json, y no quiero que gson los convierta en dobles. Lo siguiente no funciona:
@Test
public void keepsIntsAsIs(){
String json="[{\"id\":1,\"quantity\":2,\"name\":\"apple\"},{\"id\":3,\"quantity\":4,\"name\":\"orange\"}]";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Double.class, new DoubleSerializerAsInt());
Gson gson = gsonBuilder.create();
List<Map<String, Object>> l = gson.fromJson(json, List.class);
for(Map<String, Object> item : l){
System.out.println(item);
}
}
private static class DoubleSerializerAsInt implements JsonSerializer<Double>{
@Override
public JsonElement serialize(Double aDouble, Type type, JsonSerializationContext jsonSerializationContext) {
int value = (int)Math.round(aDouble);
return new JsonPrimitive(value);
}
}
La salida no es lo que quiero:
{id=1.0, quantity=2.0, name=apple}
{id=3.0, quantity=4.0, name=orange}
¿Hay alguna manera de tener números enteros en lugar de dobles en mi mapa?
{id=1, quantity=2, name=apple}
{id=3, quantity=4, name=orange}
Editar: No todos mis campos son enteros. He modificado mi ejemplo en consecuencia. He leído bastantes ejemplos en línea, incluidas algunas respuestas en este sitio, pero no funciona en este caso particular.