首页 > 代码库 > json字符串序列化exception处理
json字符串序列化exception处理
一、背景:
使用REST接口接收远端传送过来的Json格式String,需要把这个String序列化成响应的对象。
二、问题:
对方封装了一个错误的json格式过来,程序就挂了……
三、似乎解决:
通过外交手段严令对方封装标准的json格式字符串,看起来测试又通过了……
四、反思:
这样肯定是不行的,实际上线以后,万一有人恶意的往接口发一条错误的String来,程序就挂了也说不过去啊。
我在写代码的时候没有收到处理exception的提示,说明这是一个“不可查异常”,例如RuntimeException。
那就捕获这个异常并处理就好了。
五、彻底解决:
先看看原有的转换方法:
1 public <T> T GsonToBean(String gsonString, Class<T> cls) { 2 T t = null; 3 if (gson != null) { 4 t = gson.fromJson(gsonString, cls); 5 } 6 return t; 7 }
跟踪一下fromJson方法
1 public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException { 2 Object object = fromJson(json, (Type) classOfT); 3 return Primitives.wrap(classOfT).cast(object); 4 }
这个方法抛出了一个JsonSyntaxException
那就捕获吧!
改进的转换方法:
public <T> T GsonToBean(String gsonString, Class<T> cls) { T t = null; if (gson != null) { try { t = gson.fromJson(gsonString, cls); } catch (JsonSyntaxException e) { System.out.println("json parse err!!!"); } } return t; }
bingo!任你传什么格式的String,程序都不会挂了。我得到了一句打印"json parse err!!!"
如果你不想在这个方法中处理这个exception,想在更上层的业务逻辑中处理它,那就throws吧。
1 public <T> T GsonToBean(String gsonString, Class<T> cls) throws JsonSyntaxException { 2 T t = null; 3 if (gson != null) { 4 t = gson.fromJson(gsonString, cls); 5 } 6 return t; 7 }
json字符串序列化exception处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。