今天尝试使用Gson,发现转Map时数值都转成了Double,百度无果后,通过查看源码,尝试可以通过自定义对象转数值策略来解决,特地记录一下;
Gson默认采取将数值转换到Double的策略ToNumberPolicy.DOUBLE
,在2.8.9
版本后,可以在GsonBuilder创建时通过setObjectToNumberStrategy
方法自定义数值转换策略;
一个简单的转换例子如下:
private static final Gson GSON = new GsonBuilder()
.disableHtmlEscaping()
// .setObjectToNumberStrategy(ToNumberPolicy.DOUBLE)
.setObjectToNumberStrategy(in -> {
double v = in.nextDouble();
if (v % 1 == 0) {
if (Integer.MIN_VALUE <= v && v <= Integer.MAX_VALUE) {
return (int) v;
} else {
return (long) v;
}
}
return v;
})
.create();