引子
现在负责的业务 和 json 打交道比较多, 最近使用fastJson框架 json串转成泛型对象遇到了一个异常 :
java.lang.ClassCastException
还原下场景 :
模型Result<T>
复制代码
public class Result<T> {
private String msg;
private List<T> module;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<T> getModule() {
return module;
}
public void setModule(List<T> module) {
this.module = module;
}
}
复制代码
为什么要使用泛型, 可以理解泛型可以接受任意类型, 有些代码是公用的, 如结果集, 不可能为每个具体结果定义一个模型, 比如 Result<User>、Result<Item>等。
复制代码
public class User {
private Long user_id;
private String user_name;
public User() {
}
public User(Long userId, String name) {
this.user_id = userId;
this.user_name = name;
}
public Long getUser_id() {
return user_id;
}
public void setUser_id(Long user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
}
复制代码
下面直接看下泛型的转换
复制代码
复制代码
public static void main(String[] args) {
Result<User> r = new Result<User>();
r.setMsg("msg");
List<User> users = new ArrayList<>();
users.add(new User(1L, "hehe"));
users.add(new User(2L, "haha"));
r.setModule(users);
String js = JSON.toJSONString(r);
System.out.println(js);
Result<User> obj = (Result<User>)JSON.parseObject(js, Result.class);
User user = obj.getModule().get(0);
System.out.println(user);
}
复制代码
复制代码
复制代码
结果 :
{"module":[{"user_id":1,"user_name":"hehe"},{"user_id":2,"user_name":"haha"}],"msg":"msg"}
Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.yuanmeng.json.User
at com.yuanmeng.json.fanxing.Client.main(Client.java:32)
复制代码
采用fastjson框架的 TypeReference 即可将json串转成定义好的泛型对象
Result<User> obj = (Result<User>) JSON.parseObject(js, new TypeReference<Result<User>>(){});
分享到:
相关推荐
前言:json字符串的转换类,需要FastJson类的支持。 注:解决Gson解析时遇到的泛型擦除问题及效率慢的问题
3. 支持Java Bean:fastjson可以将JSON字符串转换成Java Bean,也可以将Java Bean转换成JSON字符串。 4. 支持泛型:fastjson支持泛型类型的解析和序列化。 5. 支持JSONPath:fastjson支持JSONPath表达式查询。 6. 支持...
fastjson 1.2.66 已发布,这又是一个维护版本,修复了一些 BUG,并且做安全加固,补充了 AutoType 黑名单。 Issues 修复某些场景下BeanToArray报错的问题 修复某些场景多版本共存导致的的兼容问题 修复JSONArray...
fastjson 1.2.66 已发布,这又是一个维护版本,修复了一些 BUG,并且做安全加固,补充了 AutoType 黑名单。 Issues 修复某些场景下BeanToArray报错的问题 修复某些场景多版本共存导致的的兼容问题 修复...
修复Throwable继承类属性不支持自动类型转换问题 修复PrettyFormat情况下引用计算不对的问题 修复AutoType不兼容LinkedHashMap的问题 增强对Enum类型的自定类型转换 修复deserializeUsing在泛型某些场景不能正常工作...
Fastjson是一个Java库,可用于将Java对象转换为其JSON表示形式。 它还可以用于将JSON字符串转换为等效的Java对象。 Fastjson可以与任意Java对象一起使用,包括您没有源代码的现有对象。 Fastjson目标 在服务器端和...
1、redis获取到的数据序列化后,转json,经常提示转换异常(并不是每次,只是时常)。 2、不想每种用户都书写一个redis操作方法(显得tai low)。 解决: 1、redis获取到的数据序列化后,转json,经常提示转换异常:...
Fastjson目标在服务器端和android客户端中提供最佳性能提供简单的toJSONString()和parseObject()方法,将Java对象转换为JSON,反之亦然允许将已有的不可修改的对象与JSON相互转换Java泛型的广泛支持允许对象的...
bingo-bean对象拷贝,目标是比dozer更快,功能更强大,更完整的支持泛型1、该项目是复制对象的工具,创建目的是:a)、比Dozer、FastJson更快,占用内存更小b)、不同类型间的复制,包括对自定义泛型的深层识别,参见...
Fastjson是一个Java库,可用于将Java对象快速转换为其JSON表示或将JSON字符串转换为其等效的Java... Fastjson提供了一种简单的转换方法,可以将Java对象转换为JSON,反之亦然,并且广泛支持Java泛型和任意复杂的对象。
FastJson是阿里巴巴的开源项目,Java语言编写的JSON处理工具,遵循JSon规范。可实现Json字符内容转换为基本JavaBean、Map、Date、Enum、泛型等。