使用com.google.gson.Gson进行实体类与JSON转换时遇到的坑

一.、

com.google.gson.stream.MalformedJsonException

使用com.google.gson.Gson进行实体类与JSON转换时遇到的坑_第1张图片

可能原因:

1.JSON中存在空格

eg:{"data_type" : "SQL  Server"}

2.JSON中存在空字符串

eg:{ "data_type" : "" }

解决方式:
使用toJson将gson转为json

eg:
private Gson gson = new Gson();
String fieldstr = gson.toJson(obj);  // 将gson转化为json
Systableparam systable = gson.fromJson(fieldstr , Systableparam.class);

二、

java.lang.NumberFormatException: empty String 转换异常

使用com.google.gson.Gson进行实体类与JSON转换时遇到的坑_第2张图片

可能原因:
如图,field_id在实体中定义为Integer,接收的却是空字符串

解决方式

创建NullStringToEmptyAdapterFactory自定义处理类

创建StringAdapter继承TypeAdapter,重写方法

public class StringAdapter extends TypeAdapter {

	@Override
	public String read(JsonReader arg0) throws IOException {
		// TODO Auto-generated method stub
//		if (arg0.peek() == JsonToken.NULL || "".equals(arg0.peek())) {
		if (arg0.peek() == JsonToken.NULL) {
			arg0.nextNull();
            return "";
        }
        return arg0.nextString();
	}

	@Override
	public void write(JsonWriter arg0, String arg1) throws IOException {
		// TODO Auto-generated method stub
		if (arg1 == null || "".equals(arg1)) {
			arg0.nullValue();
            return;
        }
		arg0.value(arg1);
		
	}

}

创建NullStringToEmptyAdapterFactory实现TypeAdapterFactory接口

public class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {

	@Override
	public  TypeAdapter create(Gson arg0, TypeToken arg1) {
		// TODO Auto-generated method stub
		Class rawType = (Class) arg1.getRawType();
        if (rawType != String.class) {
            return null;
        }
        return (TypeAdapter) new StringAdapter();
	}

}

使用:

eg:
	private Gson gson = 
		new GsonBuilder().serializeNulls().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
	String sysstr = gson.toJson(obj);
	Systableparam systable = gson.fromJson(sysstr, Systableparam.class);

【其他】

转为自定义的List

eg:
List fiellist = 
	gson.fromJson(sysstr, new TypeToken>() {}.getType());

当map中值为null时保留该键值对

//将 new Gson() 改为 new GsonBuilder().serializeNulls().create()

Gson gson = new GsonBuilder().serializeNulls().create();

你可能感兴趣的:(Java,JSON,java,gson)