json字符串序列化exception处理
一、背景:
使用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处理的更多相关文章
- C# JSON字符串序列化与反序列化
JSON与c#对象转换http://hi.baidu.com/donick/item/4d741338870c91fe97f88d33 C# JSON字符串序列化与反序列化 – http://www. ...
- .NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr
在进行 .NET Web MVC 框架开发的网站程序的时候,我们都会遇到最关键的问题,数据传输. .NET MVC 4中的ControllerBase类建议我们用ViewBag动态数据字典形式(t ...
- json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]
网上查找“java json”,发现大家使用最多的还是json-lib来进行java对象的序列化成json对象和反序列化成java对象的操作.但是之前在网上也看到过一往篇关于json序列化性能比较的文 ...
- [参考]C# JSON字符串序列化与反序列化
C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...
- JSON字符串序列化与反序列化浅试
一.添加引用(using Newtonsoft.Json.Linq;) 二. 1.生成json字符串源码 List<string> list = new List<string> ...
- C# JSON字符串序列化与反序列化常见模型举例
C#中实体转Json常用的类JavaScriptSerializer,该类位于using System.Web.Script.Serialization;命名空间中,添加引用system.web.ex ...
- 常见Json字符串反序列化处理方式总结
常用来处理Json字符串序列化 反序列化组件:Newtonsoft.Json (https://www.newtonsoft.com/json) 参考资料https://www.cnblogs.com ...
- Redis:存储对象的两种方式(序列化和json字符串)
方式一:序列化操作 public class SerializeUtil { /* * 序列化 * */ public static byte[] serizlize(Object ...
- Json序列化与反序列化(对象与Json字符串的转换)--C#
public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...
随机推荐
- connect-proxy rpm文件的安装
1. rpm文件下载 http://rpm.pbone.net/index.php3?stat=3&search=connect-proxy&srodzaj=3 2. rpm的安装 h ...
- 使用Zxing开发Air版二维码扫描工具
简介实现的核心要点和几个须要注意的问题: 使用开源类库:Zxing,微信也是用的这个.下载地址:http://code.google.com/p/zxing/ as版:https://github.c ...
- Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程
1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱动启用性能測试,在Mali GPU驱动中激活性能測试对性能影响微不足道. 1.1 DS-5 Streamli ...
- 翻译记忆软件-塔多思TRADOS经典教程_1
窗体顶端 网络上关于TRADOS使用的文章很多,但大多数内容涉及的内容都过于广泛,刚准备上手的同行们看了总会觉得不知所云,无从下手.笔者自己也在自学阶段遇到不少麻烦.经过长期的使用和琢磨,终于写了短文 ...
- Java 基本概念
1.JVM -- java virtual machine JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类 ...
- 【.NET中AOP的实现方案】静态代理
Spring AOP 应该是比较出名的了,今天说的是C#里的AOP,C#的AOP实现的方式有很多种,现在就先介绍静态代理的实现方案: 模拟场景:我们在删除用户,或者更新用户的时候进行数据原始备份,这样 ...
- Java从零开始学二十三(集合Map接口)
一.Map接口 Collection.Set.List接口都属于单值的操作,即:每次只能操作一个对象,而Map与它们不同的是,每次操作的是一对对象,即二元偶对象,Map中的每个元素都使用key à v ...
- 圆形Camera预览实现
需求 最近有个需求要求界面上使用圆形相机预览进行面部检测 , 具体需求如下图 关于Camera之前接触得比较多 , 主要就是通过SurfaceView显示预览视图 , 因此需要展示圆形预览界面, 只需 ...
- TFS2012强制解除迁出(数据库操作方式)
同事离职,有个文件被迁出,查了好多资料终于解决. 在数据库中找到对应项目名字的数据库,例如Tfs_Project,记得先备份,保证删错了也能恢复~ 然后施行下列sql语句: --找到项目所在库 use ...
- Throwing cards away I uva1594
Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the t ...