fastjson

ParserConfig.getGlobalInstance()解决autotype被禁止问题

匿名 (未验证) 提交于 2019-12-02 23:42:01
我所在的项目组是使用的微服务架构,我们组只负责我们自有模块,其他模块由其他团队负责,有一天,看到一条新闻说是fastjson修复了一些高危漏洞,然后我们就协定升版本,然后今天就踩到了这个坑,报错如下: com.alibaba.fastjson.JSONException: unclosed.str 问题是这样的,我们原有代码转换的时候一个json字符串处理如下 String str = "{‘@type‘:‘com.dcf.platform.token.MessageHolder‘,‘forSend‘:‘211554‘,‘generateTime‘:1490422777204,‘id‘:‘18701762172‘,‘lastCanSendTime‘:1490422777204,‘message‘:‘211554‘}"; Object obj = JSON.parse(str); 当这个json字符串转化为object的时候,autotype被fastjson禁用掉了,导致异常 2、问题处理: 按照fastjson官网(就是最上面那个链接里)的说法,有几种处理方式,我们就临时先做了一个简单粗暴的处理,等到周一之后讨论具体方案(因为今天是周六) 做法就是按照官网说法,在tomcat的catalina.sh里面的JAVA_OPTS参数后面添加了JVM启动参数: -Dfastjson

fastjson基本使用

强颜欢笑 提交于 2019-12-02 22:30:31
fastjson基本使用 依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.39</version> </dependency> 简单测试 为null的属性不会被打印。 package com.ytkj.mozq_excel_server.pojo.car; import java.math.BigDecimal; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import java.util.Date; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /**

fastjson 的使用总结

匿名 (未验证) 提交于 2019-12-02 21:53:52
最近在开发过程中使用了大量的 json 作为前后端数据交换的方式,由于之前没有对 json 做过系统的学习,所有在使用过程中查阅了大量的文档与资料,这里主要记录了我在开发后对 json 以及 fastjson 使用的总结 JSON (javaScript Object Notation)是一种轻量级的数据交换格式。主要采用键值对( {"name": "json"} )的方式来保存和表示数据。 JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质上是一个字符串。更多简介见 介绍JSON 。 在日志解析,前后端数据传输交互中,经常会遇到字符串(String)与 json , XML 等格式相互转换与解析,其中 json 以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。 fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把 JSON Parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。 fastjson API 入口类是 com.alibaba.fastjson.JSON ,常用的序列化操作都可以在 JSON 类上的静态方法直接完成。 public static final Object parse (

java对象转为json字符串

匿名 (未验证) 提交于 2019-12-02 21:52:03
1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为json字符串,初始化时最好添加get()和set()方法,避免错误 来源:博客园 作者: cty136 链接:https://www.cnblogs.com/cty136/p/11521264.html

alibaba/fastjson ֮ JSONPath

匿名 (未验证) 提交于 2019-12-02 21:38:03
JOSNPath 是一个非常强大的工具,对于处理 json 对象非常方便。 官方地址: https://github.com/alibaba/fastjson/wiki/JSONPath 基本用法: https://blog.csdn.net/itguangit/article/details/78764212 1. JSONPath介绍 fastjson 1.2.0之后的版本支持JSONPath。这是一个很强大的功能,可以在java框架中当作对象查询语言(OQL)来使用。 2. API package com.alibaba.fastjson; public class JSONPath { // 求值,静态方法 public static Object eval(Object rootObject, String path); // 求值,静态方法,按需计算,性能更好 public static Object extract(String json, String path); // 计算Size,Map非空元素个数,对象非空元素个数,Collection的Size,数组的长度。其他无法求值返回-1 public static int size(Object rootObject, String path); // 是否包含,path中是否存在对象 public static

平日看到的JAVA相关技术链接

那年仲夏 提交于 2019-12-02 20:57:00
开源技术框架类: menagerie ( ZooKeeper-based Java Concurrency Libraries ) https://github.com/openUtility/menagerie#readme fastjson ( Fast是一个JSON的Processor,功能强大、易用、快速的 ) http://code.alibabatech.com/wiki/display/fastjson/fastjson commons-email (简化java email发送的API) http://commons.apache.org/email/index.html JIntellitype API (一个使用C++ DLL与windows操作系统通信的java JNI类库,仅限windows) http://melloware.com/products/jintellitype/index.html 。linux系统 可以用JxGrabKey http://sourceforge.net/projects/jxgrabkey/ rose ( Rose 是由 人人网 、 糯米网 提供的、基于Servlet规范、Spring“规范”的开放源代码WEB开发框架 ) http://code.google.com/p/paoding-rose/ metadata

Fastjson致命缺陷

笑着哭i 提交于 2019-12-02 14:42:02
前言 这个周末被几个技术博主的同一篇公众号文章 fastjson又被发现漏洞,这次危害可导致服务瘫痪! 刷屏,离之前的漏洞事件没多久,FastJson 又出现严重 Bug。目前项目中不少使用了 FastJson 做对象与JSON数据的转换,又需要更新版本重新部署,可以说是费时费力。与此同时,也带给我新的思考,面对大量功能强大的开源库,我们不能盲目地引入到项目之中,众多开源框架中任一个不稳定因素就足以让一个项目遭受灭顶之灾。趁着周末,在家学习下同样具备对象JSON相互转换功能的优秀开源框架 Gson,并且打算将今后项目使用 FastJson 的地方逐渐换成使用 Gson,记录下学习总结的内容,希望对小伙伴也有所帮助。 本文所涉及所有代码片段均在下面仓库中,感兴趣的小伙伴欢迎参考学习: https : / / github . com / wrcj12138aaa / gson - actions 版本支持: - JDK 8 - gson 2.8 .5 - junit 5.5 .1 - Lomok 1.18 .8 Gson 简介 在正式介绍 Gson 之前,我们可以先从官方的wiki看下 Gson 的描述,了解它是什么? Gson is a Java library that can be used to convert Java Objects into their JSON

解决fastjson内存对象重复/循环引用json错误

和自甴很熟 提交于 2019-12-02 14:23:51
什么是重复/循环引用 简单说,重复引用就是一个集合/对象中的多个元素/属性同时引用同一对象,循环引用就是集合/对象中的多个元素/属性存在相互引用导致循环。 举例说明 重复引用 List<Object> list = new ArrayList<>(); Object obj = new Object(); list.add(obj); list.add(obj); 循环引用 // 循环引用的特殊情况,自引用 Map<String,Object> map = new HashMap<>(); map.put("map",map); // // map1引用了map2,而map2又引用map1,导致循环引用 Map<String,Object> map1 = new HashMap<>(); Map<String,Object> map2 = new HashMap<>(); map1.put("map",map2); map2.put("map",map1); 循环引用会触发的问题 暂时不说重复引用,单说循环引用。 一般来说,存在循环引用问题的集合/对象在序列化时(比如Json化),如果不加以处理,会触发StackOverflowError异常。 分析原因: 当序列化引擎解析map1时,它发现这个对象持有一个map2的引用,转而去解析map2。解析map2时

使用fastjson时出现$ref: "$.list[2]"的解决办法(重复引用)

十年热恋 提交于 2019-12-02 14:23:42
最近下做成绩分析的功能的时候,出现了$ref: "$.list[2]"的情况。 然后我查了一下出现这种情况的原因和解决办法。 出现$ref: "$.list[2]"的原因是因为循环引用/内存对象重复 那么什么是重复/循环引用? 简单说,重复引用就是一个集合/对象中的多个元素/属性同时引用同一对象,循环引用就是集合/对象中的多个元素/属性存在相互引用导致循环。 举例说明 重复引用 List<Object> list = new ArrayList<>(); Object obj = new Object(); list.add(obj); list.add(obj); 循环引用 // 循环引用的特殊情况,自引用 Map<String,Object> map = new HashMap<>(); map.put("map",map); // // map1引用了map2,而map2又引用map1,导致循环引用 Map<String,Object> map1 = new HashMap<>(); Map<String,Object> map2 = new HashMap<>(); map1.put("map",map2); map2.put("map",map1); 循环引用会触发的问题 暂时不说重复引用,单说循环引用。 一般来说,存在循环引用问题的集合/对象在序列化时(比如Json化)

springMVC中fastjson支持jsonp的实现

耗尽温柔 提交于 2019-12-02 14:23:28
1、fastjson自带 如果add多个parameter,会以,做字符串拼接。 ... import com.alibaba.fastjson.JSONPObject; ... @GetMapping("/testjsonp") @ResponseBody public Object testjsonp(String callback) { JSONPObject jsonpObject = new JSONPObject(callback); jsonpObject.addParameter(Lists.newArrayList("tom")); //jsonpObject.addParameter("jack"); return jsonpObject; } 2、jackson自带 // 核心代码块 MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result); mappingJacksonValue.setJsonpFunction(callback); 3、自定义实现 fastjson支持jsonp的实现: 继承fastjson消息转换器类:com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter package