`
lizhuang
  • 浏览: 906164 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[转]fastjson泛型类转换

 
阅读更多
引子
  现在负责的业务 和 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>>(){});


分享到:
评论

相关推荐

    FastJsonUtil.java

    前言:json字符串的转换类,需要FastJson类的支持。 注:解决Gson解析时遇到的泛型擦除问题及效率慢的问题

    【Gson+fastjson】json转换工具

    JSON(JavaScript Object Notation)是一种轻量级的...只需在项目的类路径下添加这两个JAR文件,即可利用它们的功能进行JSON转换。在Java项目中,可以通过`Class.forName()`或Maven、Gradle等构建工具来管理这些依赖。

    fastjson-1.2.83.jar下载

    3. 支持Java Bean:fastjson可以将JSON字符串转换成Java Bean,也可以将Java Bean转换成JSON字符串。 4. 支持泛型:fastjson支持泛型类型的解析和序列化。 5. 支持JSONPath:fastjson支持JSONPath表达式查询。 6. 支持...

    fastjson-1.2.66_fastjson-1.2.66.jar_Fastjson_

    - **泛型支持**:Fastjson支持Java泛型,可以自动识别并处理泛型集合和泛型Map。 - **自定义Map Key**:对于Map中的Key,Fastjson可以处理非String类型的Key,只要提供适当的序列化和反序列化策略。 7. **其他...

    fastjson-1.2.5.jar包

    在使用`fastjson-1.2.5.jar`时,开发人员可以将这个JAR文件添加到项目的类路径中,然后通过import导入相应的类,即可开始使用Fastjson提供的功能。例如: ```java import com.alibaba.fastjson.JSON; import ...

    阿里巴巴fastjson的jar包

    4. **Map操作**:对于Map对象,Fastjson能够轻松地进行JSON和Map之间的转换,支持泛型Map。 5. **流式解析和生成**:Fastjson提供了一种高效的流式解析和生成方式,适用于大数据量处理,可以有效节省内存。 **二、...

    复杂json格式转为对象

    处理复杂的JSON格式并将其转换为Java对象是一项常见的任务,这涉及到JSON库的使用,例如Jackson、Gson或Fastjson等。本资源提供了一个关于如何将复杂JSON转换为Java对象的学习实例,包括源码和可执行的jar包。 一、...

    JSON对象互转案例fastjson

    它支持各种复杂的Java类型,包括自定义类、泛型、枚举等,并且提供了丰富的API来处理JSON数据,比如`parseObject()`用于将JSON字符串解析为单个Java对象,`parse()`用于解析任意的JSON数据等。 在实际开发中,除了`...

    fastjson-1.2.49.jar

    例如,你可以定义一个`TypeReference`来处理泛型类型的转换: ```java List&lt;User&gt; users = JSON.parseArray(jsonString, new TypeReference&lt;List&lt;User&gt;&gt;() {}); ``` 另外,Fastjson还支持JSONPath,这是一种类似...

    fastjson的jar包 绿色版

    3. **类型安全**:Fastjson支持泛型,可以确保类型安全,避免运行时类型转换错误。 4. **JSONPath支持**:类似于XPath用于XML,JSONPath提供了一种在JSON结构中查询数据的方式,方便数据提取。 5. **流式API**:对于...

    fastJson开发包、源码及相关api文档

    2. **泛型支持**:能够处理带有泛型的Java类,如`List&lt;User&gt;`。 3. **自定义序列化/反序列化**:可以通过实现`SerializerFeature`和`DeserializerFeature`来自定义对象的序列化和反序列化规则。 4. **过滤器**:使用...

    fastjson.jar(包含API文档)

    - 数据类型转换:`TypeReference`类用于处理泛型类型转换,`JSONPath`类提供了JSONPath查询功能。 5. **使用示例** ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; ...

    fastjson-1.2.35.jar

    4. **自动类型推断**:Fastjson能够自动识别并处理Java对象中的泛型,无需额外配置。 5. **流式处理**:支持流式处理,适用于大数据量的场景,减少内存消耗。 三、Fastjson使用示例 1. **JSON字符串转Java对象** ...

    fastJson全部资料

    - **TypeReference**:在处理泛型类型时,由于 Java 的类型擦除,FastJson 使用 TypeReference 来保存原始的类型信息,从而在反序列化时能正确恢复泛型类型。 此外,FastJson 还支持 JSONPath,这是一种类似于 ...

    阿里巴巴 fastJson jar包

    6. **自动转换**:Fastjson可以自动识别JavaBean的字段,并将其转换为JSON,反之亦然。同时,它还支持自定义转换规则,满足个性化需求。 7. **JSONPath支持**:Fastjson提供了类似XPath的JSONPath表达式,方便对...

    fastjson-1.2.5 三合一

    Fastjson还支持许多高级特性,如JSONPath表达式用于查询JSON对象,支持Java 8日期/时间API,以及对泛型的支持等。同时,它还提供了一些工具类,如`JSONArray`, `JSONObject`, `JSONPObject`等,方便处理JSON数据。 ...

    fastjson使用

    **Fastjson 深度解析与使用指南** Fastjson 是阿里巴巴开源的一款高性能的 JSON 库,它具有极快的解析速度和简洁的 API 设计,广泛应用于 Java 开发中。在本文中,我们将深入探讨 Fastjson 的核心特性、基本用法、...

    fastjsonjar包.rar

    - 支持Java泛型:可以处理各种类型的Java对象,包括泛型集合和自定义类。 - JSONPath支持:可以使用类似于XPath的语法来查询JSON数据。 - 自动类型转换:Fastjson能自动识别并转换JSON中的日期、枚举等类型。 7....

    fastjson使用详解.md

    它支持 Java 泛型、自定义序列化类、任意复杂对象以及预先存在的无法修改的对象。 #### 二、获取与集成 - **下载 jar 包**: - 最新版本 jar 包可直接从 Maven 中央仓库下载,例如版本 1.2.53 的链接为:`...

    fastJSON 工具包

    3. **类型匹配**:尽量避免使用泛型,因为泛型在运行时会被擦除,可能会影响类型转换的准确性。 综上所述,FastJSON以其高效、易用的特性,成为了Java开发中处理JSON数据的首选工具之一。无论是在简单的对象转换...

Global site tag (gtag.js) - Google Analytics