一、背景:

使用REST接口接收远端传送过来的Json格式String,需要把这个String序列化成响应的对象。

二、问题:

对方封装了一个错误的json格式过来,程序就挂了……

三、似乎解决:

通过外交手段严令对方封装标准的json格式字符串,看起来测试又通过了……

四、反思:

这样肯定是不行的,实际上线以后,万一有人恶意的往接口发一条错误的String来,程序就挂了也说不过去啊。
我在写代码的时候没有收到处理exception的提示,说明这是一个“不可查异常”,例如RuntimeException。
那就捕获这个异常并处理就好了。

五、彻底解决:
先看看原有的转换方法:

 public <T> T GsonToBean(String gsonString, Class<T> cls) {
  T t = null;
  if (gson != null) {
    t = gson.fromJson(gsonString, cls);
  }
  return t;
}

跟踪一下fromJson方法

 public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
  Object object = fromJson(json, (Type) classOfT);
  return Primitives.wrap(classOfT).cast(object);
}

这个方法抛出了一个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吧。

 public <T> T GsonToBean(String gsonString, Class<T> cls) throws JsonSyntaxException {
  T t = null;
  if (gson != null) {
    t = gson.fromJson(gsonString, cls);
  }
  return t;
}

json字符串序列化exception处理的更多相关文章

  1. C# JSON字符串序列化与反序列化

    JSON与c#对象转换http://hi.baidu.com/donick/item/4d741338870c91fe97f88d33 C# JSON字符串序列化与反序列化 – http://www. ...

  2. .NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr

    在进行 .NET Web MVC 框架开发的网站程序的时候,我们都会遇到最关键的问题,数据传输.   .NET MVC 4中的ControllerBase类建议我们用ViewBag动态数据字典形式(t ...

  3. json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]

    网上查找“java json”,发现大家使用最多的还是json-lib来进行java对象的序列化成json对象和反序列化成java对象的操作.但是之前在网上也看到过一往篇关于json序列化性能比较的文 ...

  4. [参考]C# JSON字符串序列化与反序列化

    C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...

  5. JSON字符串序列化与反序列化浅试

    一.添加引用(using Newtonsoft.Json.Linq;) 二. 1.生成json字符串源码 List<string> list = new List<string> ...

  6. C# JSON字符串序列化与反序列化常见模型举例

    C#中实体转Json常用的类JavaScriptSerializer,该类位于using System.Web.Script.Serialization;命名空间中,添加引用system.web.ex ...

  7. 常见Json字符串反序列化处理方式总结

    常用来处理Json字符串序列化 反序列化组件:Newtonsoft.Json (https://www.newtonsoft.com/json) 参考资料https://www.cnblogs.com ...

  8. Redis:存储对象的两种方式(序列化和json字符串)

    方式一:序列化操作   public class SerializeUtil {   /*   * 序列化   * */   public static byte[] serizlize(Object ...

  9. Json序列化与反序列化(对象与Json字符串的转换)--C#

    public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...

随机推荐

  1. 用C#代码编写的SN快速输入工具

    一般软件都要输入序列号(SN),而大家平时用的最多的恐怕是盗版软件,通常盗版软件的序列号(SN)都保存成:XXXXX-XXXXX-XXXX-XXXX的形式. 而软件输入序列号的地方通常都是几个文本框( ...

  2. (LeetCode74)Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  3. 解决百度编辑器在编辑视频时src丢失的问题

    问题描述:使用的是最新的UEditor 1.4.3.3版本,在上传完视频后,编辑的时候出现视频的src丢失的问题 解决方式:修改ueditor.config.js文件,将 img: ['src', ' ...

  4. GLSL语言内置的变量详解

    GLSL语言内置的变量,包括内置的顶点属性(attribute).一致变量(uniform).易变变量(varying)以及常量(const),一方面加深印象,另一方面今天的文章可以为以后的编程做查询 ...

  5. windows下的虚拟内存分配分析

    让我们从原始的进程创建开始分析吧.当进程创建后,操作系统给该进程分配4GB的虚拟地址空间,这部分虚拟内存是你的应用程序看的到的区域(注意很大一部分是不能访问的,比如:内核区域,这部分加载了操作系统中的 ...

  6. Linux安装 微信开发者工具(deepin linux ubt)

    一.环境:: deepin linux15.4.1 二.安装过程: 2.1 安装wine sudo apt-get install wine 2.2 安装nwjs-sdk 2.2.1 下载linux版 ...

  7. Flask 源代码阅读笔记

    我认为我已经养成了一个坏习惯.在使用一个框架过程中对它的内部原理非常感兴趣,有时候须要花不少精力才 明确,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源代码面前,了无秘密.这 ...

  8. 算法笔记_176:历届试题 最大子阵(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入 ...

  9. java二维码生成工具

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.ut ...

  10. 引入css的几种方式

      使用CSS样式的几种方式 CreateTime--2017年10月11日16:45:26 Author:Marydon a.外部样式 a1.链接式(推荐使用) <link href=&quo ...