后台返回前端的数据中可能有因数据库本身储存的null返回,或者是需要返回给前端一个空字符串或者数据本身的默认值。这样在自己本意操作下可以返回给前端一个确认值,但是因粗心大意或者忘记操作的情况下就会忘记操作。而在gson返回给前端是就会出现null值,这样给前端操作带来麻烦,也可能会增加显示的错误。
修改前显示
private String goodsRemark;
private Integer goodsClicksaa;
private BigDecimal goodsSellingPriceaa;
修改后
进行修改后,String,Integer,BigDecimal属性的值在未赋值的情况下变成自定义的值。
代码示例:
GsonBuilder gsonBuilder = new GsonBuilder();
//注册自定义String的适配器
gsonBuilder.registerTypeAdapter(String.class, STRING);
//注册自定义Integer的适配器
gsonBuilder.registerTypeAdapter(Integer.class,INTEGER);
//注册自定义BigDecimal的适配器
gsonBuilder.registerTypeAdapter(BigDecimal.class,BIGDECIMAL);
Gson gson = gsonBuilder.serializeNulls().create();
自定义的适配器
//自定义String适配器
private static final TypeAdapter STRING = new TypeAdapter()
{
@Override
public void write(JsonWriter jsonWriter, Object o) throws IOException {
if (o == null)
{
// 在这里处理null改为空字符串
jsonWriter.value("");
return;
}
jsonWriter.value(o.toString());
}
@Override
public String read(JsonReader reader) throws IOException
{
if (reader.peek() == JsonToken.NULL)
{
reader.nextNull();
return "";
}
return reader.nextString();
}
};
//自定义Integer适配器
private static final TypeAdapter INTEGER = new TypeAdapter()
{
@Override
public void write(JsonWriter jsonWriter, Object o) throws IOException {
if (o == null)
{
// 在这里处理null改为0
jsonWriter.value(0);
return;
}
jsonWriter.value(Integer.valueOf(o.toString()));
}
@Override
public Integer read(JsonReader reader) throws IOException
{
if (reader.peek() == JsonToken.NULL)
{
reader.nextNull();
return 0;
}
return reader.nextInt();
}
};
//自定义BigDecimal适配器
private static final TypeAdapter BIGDECIMAL = new TypeAdapter()
{
@Override
public void write(JsonWriter jsonWriter, Object o) throws IOException {
if (o == null)
{
// 在这里处理null改为0
jsonWriter.value(new BigDecimal("0"));
return;
}
jsonWriter.value(new BigDecimal(o.toString()));
}
@Override
public BigDecimal read(JsonReader reader) throws IOException
{
if (reader.peek() == JsonToken.NULL)
{
reader.nextNull();
return new BigDecimal("0");
}
return new BigDecimal(reader.nextString());
}
};