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

4 篇文章 0 订阅

一.、

com.google.gson.stream.MalformedJsonException

在这里插入图片描述

可能原因:

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 转换异常

在这里插入图片描述

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

解决方式

创建NullStringToEmptyAdapterFactory自定义处理类

创建StringAdapter继承TypeAdapter,重写方法

public class StringAdapter extends TypeAdapter<String> {

	@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 <T> TypeAdapter<T> create(Gson arg0, TypeToken<T> arg1) {
		// TODO Auto-generated method stub
		Class<T> rawType = (Class<T>) arg1.getRawType();
        if (rawType != String.class) {
            return null;
        }
        return (TypeAdapter<T>) 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<Object>

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

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

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

Gson gson = new GsonBuilder().serializeNulls().create();
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值