1. import static org.junit.Assert.assertFalse;
  2. import static org.junit.Assert.assertTrue;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.junit.Test;
  6. import com.alibaba.fastjson.JSON;
  7. import com.alibaba.fastjson.JSONArray;
  8. import com.alibaba.fastjson.TypeReference;
  9. public class GenericTypeTest {
  10. static class Foo<T>{
  11. private T t;
  12. public T getT() {
  13. return t;
  14. }
  15. public void setT(T t) {
  16. this.t = t;
  17. }
  18. }
  19. @Test
  20. public void test_FirstWithClass() {
  21. Foo<List<Integer>> foo = new Foo<List<Integer>>();
  22. List<Integer> list = new ArrayList<Integer>();
  23. list.add(3);
  24. foo.setT(list);
  25. String v = JSON.toJSONString(foo);
  26. System.out.println(v);
  27. //parse with class
  28. Foo<?> rst = JSON.parseObject(v, foo.getClass());
  29. assertTrue(rst.getT() instanceof JSONArray);
  30. //parse with TypeReference
  31. rst = JSON.parseObject(v,new TypeReference<Foo<List<Integer>>>(){});
  32. assertTrue(rst.getT() instanceof JSONArray);//这里没有失败
  33. }
  34. //  @Test//此用例跟上边那个不能同时跑,要不然上边跑过之后下边就跑不通了
  35. public void test_FirstWithTypeReference() {
  36. Foo<List<Integer>> foo = new Foo<List<Integer>>();
  37. List<Integer> list = new ArrayList<Integer>();
  38. list.add(3);
  39. foo.setT(list);
  40. String v = JSON.toJSONString(foo);
  41. System.out.println(v);
  42. //parse with TypeReference
  43. Foo<?> rst = JSON.parseObject(v,new TypeReference<Foo<List<Integer>>>(){});
  44. assertFalse(rst.getT() instanceof JSONArray);
  45. }
  46. }

文字描述的话就是:

  1. 泛型类型反序列化调用paseObject的时候,第一次parseObject传Class,后边传TypeReference或者Type就解析不出泛型类型了,泛型对应的类型只能解析成JsonObject

版本1.2.4及以前,可以解析泛型的版本,应该都有。暂时可以通过含泛型的对象反序列化的时候,只通过传入Type或者TypeReference类型来实现。

Fastjson反序列化泛型类型时候的一个问题的更多相关文章

  1. .NET高级代码审计(第三课)Fastjson反序列化漏洞

    0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本,而在.Net领域也有一个Fastjson的库,作者官宣这是一个读写Json效率最高的的.Net 组件,使用内置 ...

  2. fastjson反序列化多层嵌套泛型类与java中的Type类型

    在使用springmvc时,我们通常会定义类似这样的通用类与前端进行交互,以便于前端可以做一些统一的处理: public class Result<T> { private int ret ...

  3. FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链

    0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...

  4. Fastjson反序列化漏洞概述

    Fastjson反序列化漏洞概述 ​ 背景 在推动Fastjson组件升级的过程中遇到一些问题,为帮助业务同学理解漏洞危害,下文将从整体上对其漏洞原理及利用方式做归纳总结,主要是一些概述性和原理上的东 ...

  5. fastjson反序列化漏洞研究(上)

    前言 最近护网期间,又听说fastjson传出“0day”,但网上并没有预警,在github上fastjson库中也有人提问关于fastjson反序列化漏洞的详情.也有人说是可能出现了新的绕过方式.不 ...

  6. FastJson反序列化获取不到值

    今天碰到一个问题,使用fastjson反序列化,就是将JSON解析成javaBean时,一个字段值为null.后面经查,是JavaBean中的set方法写错了,fastJson解析的是利用反射通过se ...

  7. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  8. 解决fastjson反序列化日期0000-00-00失败的方案

    解决fastjson反序列化日期0000-00-00失败的方案 22 Jul 2016 一.案例场景复原 示例场景里涉及两个class:TestDemo.java, DateBeanDemo.java ...

  9. FastJson反序列化和构造函数之间的一点小秘密

    各位看官大家下午好,FastJson想必大家都很熟悉了,很常见的Json序列化工具.今天在下要和大家分享一波FastJson反序列化和构造函数之间的一点小秘密. 下面先进入大家都深恶痛绝的做题环节.哈 ...

随机推荐

  1. WEB黑客工具箱之LiveHttpHeaders介绍

    一.LiveHttpHeaders之安装 自行百度 二.LiveHttpHeaders主窗口 根据我们目的的不同,LiveHttpHeaders有两种启动方法:当我们只想监视通信量的时候,可以从浏览器 ...

  2. Design Tutorial: Inverse the Problem

    Codeforces Round #270 D:http://codeforces.com/contest/472/problem/D 题意:给以一张图,用邻接矩阵表示,现在问你这张图能不能够是一棵树 ...

  3. [jobdu]栈的压入、弹出序列

    用一个栈辅助,模拟过程+判断就可以了. #include <iostream> #include <memory.h> #include <stack> #defi ...

  4. Android EditText多行显示及所有属性

    android:id="@+id/editSms" android:layout_width="fill_parent" android:layout_heig ...

  5. matlab安装和入门

    下载iso镜像: ISO镜像下载地址链接: http://pan.baidu.com/s/1i31bu5J 密码: obo1 单独破解文件下载链接: http://pan.baidu.com/s/1c ...

  6. Android 使用 popupWindow实现弹层并操作弹层元素

    需求: 点页面,出现弹层,弹层包含EditText,Button等,点击Button实现提交操作: 最终代码: private PopupWindow popupWindow ; private Ed ...

  7. 解决在IE里预览时弹出:为了有利于保护安全性......

    用Dreamweaver做网页,在IE里预览时弹出这个:为了有利于保护安全性,Internet Explorer 已限制此网页运行可以访问计算机的脚本或ActiveX控件. 在页面顶部加段代码就可以了 ...

  8. 利用if,else判断输入的是不是一个正整数

    static void Main(string[] args)        {            while (true)                      { Console.Writ ...

  9. Master Nginx(5) - Reverse Proxy Advanced Topics

    Security through separtion Encrypting traffic with SSL Authenticating clients using SSL Blocking tra ...

  10. 使用Flashbuilder/Flashbuilder-plugins搭建Flex工程每日构建(自动化构建)的方法

    前段时间研究flex工程自动编译的时候,遇到了阻碍,就放下了,直到今天每日构建的问题又一次给项目组带来了麻烦,于是我彻底愤怒了. 最后,我的怒火没有白费,写出来以发泄情绪. [基本原理]: adobe ...