在接收第三方接口或者自己写的也好,当返回的是JSON字符串时,你是如何接收的呢?只要规范点,一般都会在Response类中定义如下三个属性:
public class Response<T> {
/**
* 注意T是泛型
*/
protected T data;
protected Integer code ;
protected String message;
}
加入接口返回的JSON字符串是这样的:
{"code": 200, "message": "成功", "data": null}
或者是这样的:
{"code": 200, "message": "成功", "data": []}
{"code": 200, "message": "成功", "data": {}}
注意data属性可能是null、数组、对象。然后使用JSON解析库:fastjson、gson,这些都是大同小异的,我就以fastjson为例。上面列出的三种情况fastjson都是可以正常解析的。但,如果接口返回的是这样的:
{"code": 500, "message": "服务器错误", "data": false}
或者
{"code": 400, "message": "参数错误", "data": 404}
{"code": 406, "message": "参数错误", "data": "这是字符串"}
注意data里面不是对象也不是数组,而是单个类型:布尔、数字、字符串的时候,使用fastjson来解析就会出现类型转换异常!
之所以出现这样的问题,还是因为接口返回不合理造成的。但是有时候我们并不能去改变他们什么,只好自己来做处理。解决办法就是data属性不能使用泛型,而是使用Object:
public class Response {
/**
* 注意是Object类型
*/
protected Object data;
protected Integer code ;
protected String message;
}
或者如果可能的话,作为架构的设计者,你应该限制data属性必须是数组或者是对象形式,不能其它基本数据类型(包括字符串)。
2830

被折叠的 条评论
为什么被折叠?



