踩过很多坑。试过好多方法,map,对象,转json往往会遇到很多问题,最常见的问题,莫过于出现了Object is null这个问题
查了好多资料。也试过很多方法。主流解决办法三种:
第一种:循环遍历对象中的数据,if判断null就赋值“”,这种方法一般的对象还可以,可是我们的项目对象基本都是二十几个,这样弄起来很费劲,因此放弃。
第二种:遇到null就不输出,只保留存在的。
Gson进行转化
-
System.out.println( "----------gson(对null字段转换)---------");
-
Gson gsonSerializeNull = new GsonBuilder().serializeNulls().create();
-
System.out.println(gsonSerializeNull.toJson(s));
但是这种方式,遇到null的情况就会不输出这个null的key喝value
第三种,我们需要null就替换成“”
Gson是google的产品,性能个人觉得也是较为快速的。有一个缺点就是无法设置null替换,因此对于个人来说还是需要改造一下的,查了很多资料,最后在https://stackoverflow.com/questions/9483348/gson-treat-null-as-empty-string/24252578#24252578
找到了相关方法,具体方法就是自己创建一个UntilTool类,在其他的类中直接引用就可以了。
具体代码详见代码。其他的只需要引用就可以了。
package com.tecnova.utils;
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
public class JsonStringNull{
public static class NullStringToEmptyAdapterFactory<T> implements TypeAdapterFactory {
@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;
}
return (TypeAdapter<T>) new StringAdapter();
}
}
public static class StringAdapter extends TypeAdapter<String> {
public String read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return "";
}
return reader.nextString();
}
public void write(JsonWriter writer, String value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
}
以下是例子:
原本输出对象,但是前台说让转成json,但是直接用json转null的对象会报错。
因此需要进行改造
city等原本是null的就变成了“”
具体使用方式: