fastjson

springboot使用fastjson解析

六眼飞鱼酱① 提交于 2019-12-24 10:33:23
“明年此日青云去,却笑人间举子忙” 序 刚巧在学习springboot,于是记录起这个知识点,或许以后用得到,也或许可以帮助其他学习者。 使用步骤 在pom.xml文件中加入fastjson的依赖 < dependency > < groupId > com . alibaba < / groupId > < artifactId > fastjson < / artifactId > < version > 1.2 .47 < / version > < / dependency > 启动文件继承WebMvcConfigurationSupport类 @SpringBootApplication public class DemoApplication extends WebMvcConfigurationSupport { } 重写configureMessageConverters方法 /** *@author aRunner *@date 2019/12/21 *@description 重写configureMessageConverters */ @Override protected void configureMessageConverters ( List < HttpMessageConverter < ? >> converters ) { super .

fastjson的@JSONField注解的一点问题

那年仲夏 提交于 2019-12-24 06:58:40
@JSONField 看源码它可以作用于字段和方法上。 引用网上说的,   一、作用Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。 但是我在使用中,发现并不如上所说。 例如 @JSONField(name="project_id") private Long ProjectID 发现bean 转json的时候并是"project_id":xxx的形式,json转bean的时候也不会把"project_id":xx的内容设置到ProjectID的里面。 fastjson的版本是1.1.15   二、作用在setter和getter方法上 这种方式倒是在使用的过程当中符合期望。 /**bean 转json 时会把bean中的ProjectID转换为project_id */ @JSONField(name="project_id") public Long getProjectID() { return ProjectID; } /**json 转bean 时会把json中的project_id值赋值给projectID*/ @JSONField(name="project_id") public void setProjectID(Long projectID) { ProjectID = projectID; }

一次fastjson解析问题导致的springmvc接收List格式参数问题

瘦欲@ 提交于 2019-12-23 23:47:57
springmvc的接口如果需要接受json的数据,那么需要定义@RequestBody来解析json数据,springmvc中会将接受的json数据进行解析,然后并封装到对应的实体类中,springmvc并且自持自定义解析json数据的转换器,如果使用Fastjson来转换json请求,那么在封装个参数的时候,需要注意参数的接收格式 接收参数格式问题: 如果请求的参数是一个对象包含List集合的类型: { "list" : [ { "name" : "LVSHCFDC0CE080012" , "age" : "沪A123456" , "gender" : "维修保养" } , ... ] } 并且接收的参数封装为: //这个是接口 public Response index ( @RequestBody ReqListVo < UserVo > vo ) { } // 这个是RequListVo对象 @Data public class ReqListVo < T > { public List < T > list ; } // List中包含的对象 public class UserVo { private String name ; private String age ; private String gender ; } 这样封装一般是没有问题,定义一个对象,并设置泛型

Redis序列化配置

谁说我不能喝 提交于 2019-12-23 22:52:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序列化说明 修改RedisTemplate的默认序列化配置,默认是使用JDK的序列化,通过自己实现RedisSerializer接口编写需要的序列化方式。 使用Fastjson进行RedisTemplate的Value序列化 package cc.xuepeng.config; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.data.redis.serializer.RedisSerializer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; /** * 使用Alibaba的FastJson作为Json序列化的工具。 * * @param <T> * @author xuepeng */ public class FastJsonRedisSerializer<T> implements RedisSerializer<T> { /** * 默认的转换编码。 */ private static final

[Object Object] 解决方案 JSON.stringify()

青春壹個敷衍的年華 提交于 2019-12-20 11:46:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> [Object Object] 说明 [object Object]是对象的字符串形式,由于隐式调用了 Object 对象的 toString() 方法,形式是:"[object Object]"。 [object Object] 表示的就只是一个对象,当前对象 toString() 没有正确解析,可以使用 JSON.stringify() 来避免这个问题。 Json.stringify() 是序列化函数,用于将对象转化为字符串;Json.parse() 是反序列化函数,用于将字符串转化为 Json 对象; 问题分析 此处是前后端分析开发项目,Vue + SpringBoot,前后端一般通过 Json 数据交互。此处"日志列表查询"后端接收到请求数据,进行解析时抛出异常。 后端日志: params : {"start":["0"],"length":["15"],"searchMap":["[object Object]"]} 抛出异常: JSON parse error: syntax error, expect {, actual error, pos 0, fastjson-version 1.2.41; nested exception is com.alibaba.fastjson

Fastjson 反序列化漏洞利用总结

微笑、不失礼 提交于 2019-12-20 10:27:31
本篇文章对Fastjson漏洞利用的过程做个简单的记录。 背景: Fastjson是Alibaba开发的,java语言编写的高性能JSON库,采用“假定有序快速匹配”的算法,号称Java语言中最快的JSON库。 其项目地址为 https://github.com/alibaba/fastjson ,其提供两个主要接口toJsonString和parseObject来分别实现序列化和反序列化。示例代码: //序列化 User user = new User ( "guest" ,2 ) ; String jsonString = JSON.toJSONString ( user ) //反序列化 String jsonString = "{\\" name\\ ":\\" guest\\ ",\\" age\\ ":12}" User user = ( User ) JSON.parse ( jsonString ) 其最近几年爆出的漏洞影响都比较大,下面会进行简单的说明。 20170315第一次爆出的漏洞 2017年3月15日,Alibaba官方发布了一条安全更新: https://github.com/alibaba/fastjson/wiki/security_update_20170315 。宣布fastjson<=1.2.24存在远程代码执行高危安全漏洞。 利用原理:

fastjson对象,JSON,字符串,map之间的互转

依然范特西╮ 提交于 2019-12-19 15:51:57
1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.parseObject(strInfoDo, InfoDo.class); 2.对象集合与字符串之间的互转 将对象集合转换成为字符串 String users = JSON.toJSONString(users); 将字符串转换成为对象集合 List<User> userList = JSON.parseArray(userStr, User.class); 3.字符串互转JSONObject String 转 Json对象 JSONObject jsonObject = JSONObject.parseObject(jsonString); json对象转string JSONObject jsonObject = JSONObject.parseObject(str);//json对象转字符串 String jsonString = jsonObject.toJSONString(); 4.map与字符串之间互转 //字符串转map JSONObject jsonObject = JSONObject.parseObject(str); Map<String,Object> map =

Redis序列化选型及应用

北城以北 提交于 2019-12-19 11:11:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 序列化的含义、意义及使用场景 序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。 使用场景:所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;所有需要保存到磁盘的java对象都必须是可序列化的。通常建议:程序创建的每个JavaBean类都实现Serializeable接口。 Redis序列化Spring Data实现 Spring-data-redids提供RedisSerializer接口用于Redis序列化实现,具体分为以下几种实现 JdkSerializationRedisSerializer RedisTemplate默认序列化 优点: 通用性强 反序列化时不需要提供类型信息(class) 缺点: 序列化速度慢 序列化占用内存大 序列化对象必须实现Serializable接口 可读性差 注意事项:

FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

爷,独闯天下 提交于 2019-12-19 05:35:07
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。 JSONObject:fastJson提供的json对象。 JSONArray:fastJson提供json数组对象。 我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。我们看一下源码。 同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。 此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。 首先定义三个json格式的字符串,作为我们的数据源。 //json字符串-简单对象型 private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}"; //json字符串-数组类型 private static final String JSON_ARRAY_STR = "[{\

fastJson

梦想的初衷 提交于 2019-12-19 01:54:53
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。 JSONObject:fastJson提供的json对象。 JSONArray:fastJson提供json数组对象。 我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。我们看一下源码。 同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。 此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。 首先定义三个json格式的字符串,作为我们的数据源。 //json字符串-简单对象型 private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}"; //json字符串-数组类型 private static final String JSON_ARRAY_STR = "[{\