引子

  现在负责的业务 和 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>>(){});

fastJson泛型如何转换的更多相关文章

  1. 将java类的泛型集合转换成json对象

    一般用extjs开发传输都是用json比较多,这个将来大家也许会用到... ConvertJsonUtils.java package com.sunweb.util.jsonfactory; imp ...

  2. List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

    public class ConvertX { #region 将集合类转换成DataTable /// <summary> /// 将集合类转换成DataTable /// </s ...

  3. java泛型基础、子类泛型不能转换成父类泛型

    参考http://how2j.cn/k/generic/generic-generic/373.html 1.使用泛型的好处:泛型的用法是在容器后面添加<Type>Type可以是类,抽象类 ...

  4. 记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题

    在解析json数据的时候,在使用泛型对象的时候即: public class ResultMsgDto<E> implements Serializable { private stati ...

  5. C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串

    在工作中,如果需要跟XML打交道,难免会遇到需要把一个类型集合转换成XML格式的情况.之前的方法比较笨拙,需要给不同的类型,各自写一个转换的函数.但是后来接触反射后,就知道可以利用反射去读取一个类型的 ...

  6. C#中把任意类型的泛型集合转换成SQLXML数据格式的小例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  7. java泛型基础、子类泛型不能转换成父类泛型--未完待续

    参考http://how2j.cn/k/generic/generic-generic/373.html 1.使用泛型的好处:泛型的用法是在容器后面添加<Type>Type可以是类,抽象类 ...

  8. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  9. gson 带泛型的转换

    json转对象 public static <T> T json2Obj(String json, Class<T> cls) { Gson gson = new Gson() ...

随机推荐

  1. PHP中的cookie

    第一次设置后,第二次访问才生效,决绝办法可以用js跳转首页实现刷新. 1.创建/更新cookie setCookie($cookieName,$value,time()+秒数): 例子:创建一个coo ...

  2. nginx 的模块及处理流程

         nginx的内部结构是由核心部分和一系列的功能模块所组成.这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展.这样的模块化设计类似于面向对象中的接口类,它增强了 ...

  3. Oracle优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  4. Linux基本命令(9)定位、查找文件的命令

    定位.查找文件的命令 命令 功能 命令 功能 which 从path中找出文件的位置 find 找出所有符合要求的文件 whereis 找出特定程序的路径 locate 从索引中找出文件位置 9.1 ...

  5. Javascript 中的小括号 “()” 的多义性

    Javascript 中小括号有5 种语义 语义1:函数声明时参数表 1 function func(arg1, arg2){  2    // ...  3  }    语义2:和一些语句联合使用以 ...

  6. eclipse 编辑器的使用

    随着所编辑的文件数目的增加以及在这些文件之间的快速切换,一个又一个文件的编码以及对编辑器会话(session)的管理将会变得非常复杂.这时,有几件事情你是可以做的. 通过使用键盘快捷键,你可以快速选择 ...

  7. 【LeetCode】88 - Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  8. 转——使用Axure制作App原型应该怎样设置尺寸?

    想用Axure设计一个 APP原型 放到真实的移动设备中演示,但不知道应该使用什么尺寸?若要解释清楚像素和分辨率需要的篇幅比较长,请大家参考百度百科.这里金乌直接给大家提供一个常用的移动设备尺寸列表, ...

  9. js中location.search、split()HTML5中localStorage

    1. location.search在客户端获取Url参数的方法 location.search是从当前URL的?号开始的字符串 如:http://www.baidu.com/s?wd=baidu&a ...

  10. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...