在项目开发的过程中,经常会遇到空字符串的
json
,为了避免遇到空指针的问题,我们往往要进行字符串的判空处理,不过如果是使用Gson
,则可以通过自定义TypeAdapter
来处理空字符串的问题
定义一个处理空字符串的 TypeAdaper
:
public class StringNullAdapter extends TypeAdapter<String> {
@Override
public String read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
//空的String对象进行赋值
return "";
}
return reader.nextString();
}
@Override
public void write(JsonWriter writer, String value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
如果要使用上面的 StringNullAdapter
,还需要定义一个 TypeAdapterFactory
:
public class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {
@Override
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<T> rawType = (Class<T>) type.getRawType();
if (rawType != String.class) {
return null;
}
//针对String的处理
return (TypeAdapter<T>) new StringNullAdapter();
}
}
然后在 Gson
的构建时注册这个 ypeAdapterFactory
即可:
Gson gson = new GsonBuilder()
.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory())
.serializeNulls()
.create();