解决fastjson泛型转换报错的解决方法

 更新时间:2020年11月23日 09:53:02   作者:旷野历程  
这篇文章主要介绍了解决fastjson泛型转换报错的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

错误信息

Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.xh.demo.UserDO

泛性类

@Data
public class ResultSetDTO<T> {
  private Integer totalSize;
  private Integer count;
  private List<T> records;
}

实体类

@Data
public class UserDO {

  private String id;
  private String name;
}

Demo测试

public class AppDemo {

  public static void main(String[] args) {
    ResultSetDTO<UserDO> resultSetDTO = new ResultSetDTO<UserDO>();
    resultSetDTO.setTotalSize(10);
    resultSetDTO.setCount(10);

    List<UserDO> list = new ArrayList<>();
    UserDO userDO = null;
    for (int i = 10000; i < 10003; i++) {
      userDO = new UserDO();
      userDO.setId(i + "");
      userDO.setName("TEST_" + i);
      list.add(userDO);
    }
    resultSetDTO.setRecords(list);

    String jsonString = JSON.toJSONString(resultSetDTO);
    System.out.println(jsonString);
    
    ResultSetDTO<XsyUserDO> resultSet = JSON.parseObject(jsonString, ResultSetDTO.class);
    List<UserDO> records = resultSet.getRecords();
    // 转换是报异常
    for (UserDO user : records) {
      System.out.println(user.getName());
    }
  }

debuge 调试时发现 resultSet.getRecords(); 返回的是 ArrayList<JSONObject> 类型,不是 ArrayList<UserDO> 类型。由于类型引用必须强制指定目标对象,因此违背了 FastJson 规范,所以报:Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.xh.demo.UserDO。

在这里插入图片描述

解决方法

// 方法一
JSONObject parseObject = JSON.parseObject(jsonString);
List<UserDO> records = JSON.parseArray(parseObject.getString("records"), UserDO.class);
for (UserDO user : records) {
  System.out.println(user.getName());
}

// 方法二
ResultSetDTO<XsyUserDO> resultSet = JSON.parseObject(jsonString, ResultSetDTO.class);
List<UserDO> records = JSONObject.parseArray(resultSet.getRecords().toString(), UserDO.class);
for (UserDO user : records) {
  System.out.println(user.getName());
}

// 方法三
ResultSetDTO<XsyUserDO> resultSet = JSON.parseObject(jsonString, new TypeReference<ResultSetDTO<UserDO>>(){});
List<UserDO> records = resultSet.getRecords();
for (UserDO user : records){
  System.out.println(user.getName());}
}

到此这篇关于解决fastjson泛型转换报错的解决方法的文章就介绍到这了,更多相关fastjson 泛型转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA导入eclipse项目并且部署到tomcat的步骤详解

    IDEA导入eclipse项目并且部署到tomcat的步骤详解

    这篇文章主要给大家介绍了关于IDEA导入eclipse项目并且部署到tomcat的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • Java操作XML转JSON数据格式详细代码实例

    Java操作XML转JSON数据格式详细代码实例

    在Java中我们可以使用一些现成的库来实现XML到JSON的转换,下面这篇文章主要给大家介绍了关于Java操作XML转JSON数据格式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • springboot的SpringPropertyAction事务属性源码解读

    springboot的SpringPropertyAction事务属性源码解读

    这篇文章主要介绍了springboot的SpringPropertyAction事务属性源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • SpringBoot如何取消内置Tomcat启动并改用外接Tomcat

    SpringBoot如何取消内置Tomcat启动并改用外接Tomcat

    这篇文章主要介绍了SpringBoot如何取消内置Tomcat启动并改用外接Tomcat,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解Spring-Boot中如何使用多线程处理任务

    详解Spring-Boot中如何使用多线程处理任务

    本篇文章主要介绍了详解Spring-Boot中如何使用多线程处理任务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • SpringMVC中控制器返回JSON数据的实现

    SpringMVC中控制器返回JSON数据的实现

    本文主要介绍了SpringMVC中控制器返回JSON数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Spring配置与依赖注入基础详解

    Spring配置与依赖注入基础详解

    依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例
    2022-08-08
  • SpringCloud2020 bootstrap 配置文件失效的解决方法

    SpringCloud2020 bootstrap 配置文件失效的解决方法

    这篇文章主要介绍了SpringCloud2020 bootstrap 配置文件失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 深入解析Java中的JDBC事务

    深入解析Java中的JDBC事务

    这篇文章主要介绍了深入解析Java中的JDBC事务,包含了Java多线程的事务并发等知识,需要的朋友可以参考下
    2015-08-08
  • SpringBoot使用Spring Cache高效处理缓存数据

    SpringBoot使用Spring Cache高效处理缓存数据

    Spring Cache是一个框架,只要简单加一个注解,就能实现缓存功能,本文主要介绍了SpringBoot使用Spring Cache高效处理缓存数据,感兴趣的可以了解一下
    2023-11-11

最新评论