关键词:
异常信息
com.alibaba.fastjson.JSONException: For input string: "2022-12"
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:693)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:395)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:299)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:572)
at com.bzcst.bop.oms.strategy.TestDTO.main(TestDTO.java:48)
Caused by: java.lang.NumberFormatException: For input string: "2022-12"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at com.alibaba.fastjson.serializer.DateCodec.cast(DateCodec.java:335)
at com.alibaba.fastjson.parser.deserializer.AbstractDateDeserializer.deserialze(AbstractDateDeserializer.java:184)
at com.alibaba.fastjson.parser.deserializer.AbstractDateDeserializer.deserialze(AbstractDateDeserializer.java:16)
at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:86)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1277)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:892)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1610)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_TestDTO.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:296)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:688)
... 4 more
json字符串为
String jsonString = "\\"testMonth\\":\\"2022-12\\",\\"testDate\\":\\"2022-10-23\\",\\"testDateTime\\":\\"2022-10-23 23:32:33\\"";
需要转为Java对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestDTO
private Date testMonth;
private Date testDate;
private Date testDateTime;
public static void main(String[] args)
String jsonString = "\\"testMonth\\":\\"2022-12\\",\\"testDate\\":\\"2022-10-23\\",\\"testDateTime\\":\\"2022-10-18 19:20:21\\"";
TestDTO testDTO = JSONObject.parseObject(jsonString, TestDTO.class);
System.out.println(testDTO);
其中testMonth 2022-12 就会报错。
查看Debugger
发现源码实际上是通过DefaultJSONParser里面的dateFormatPattern实现序列号格式的。
最终也是通过DefaultJSONParser完成反序列化的。
那么可以直接对dateFormatPattern设置值
DefaultJSONParser parser = new DefaultJSONParser(jsonString);
parser.setDateFormat("yyyy-MM");
测试
public static void main(String[] args)
String jsonString = "\\"testMonth\\":\\"2022-12\\",\\"testDate\\":\\"2022-10-23\\",\\"testDateTime\\":\\"2022-10-18 19:20:21\\"";
DefaultJSONParser parser = new DefaultJSONParser(jsonString);
parser.setDateFormat("yyyy-MM");
TestDTO value = parser.parseObject(TestDTO.class);
parser.close();
System.out.println(value);
// TestDTO testDTO = JSONObject.parseObject(jsonString, TestDTO.class);
// System.out.println(testDTO);
结果正常输出
TestDTO(testMonth=Thu Dec 01 00:00:00 CST 2022, testDate=Sun Oct 23 00:00:00 CST 2022, testDateTime=Tue Oct 18 19:20:21 CST 2022)
重写toString后结果更清晰
TestDTO receivableMonth=2022-12-01 00:00:00, testDate=2022-10-23 00:00:00, testTime=2022-10-18 19:20:21
一文带你快速掌握fastjson的使用(代码片段)
...API方法:JSON.toJSONString序列化:是指将Java对象转成json格式字符串的过程。JavaBean对象、List集合对象、Map集合为应用最广泛的。1.1序列化Java对象Java中的Student对象序列化为JSON格式字符串@TestpublicvoidobjectToJson()Studentstudent=newStudent();stu... 查看详情
fastjson序列化与反序列化(代码片段)
...能都通过这个类提供。序列化API//将Java对象序列化为JSON字符串,支持各种各种Java基本类型和JavaBeanpublicstaticStringtoJSONString(Objectobject,SerializerFeature...features);//将Java对象序列化为JSON字符串,返回JSON字符串的ut 查看详情
fastjson1.2.24反序列化任意命令执行(代码片段)
...f0c;可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在的没有源码的对象。Fastjson源码地址:https://github.com/alibaba/fastjsonFastjson中文Wiki:https:/... 查看详情
13-java安全——fastjson1.2.24反序列化templatesimpl利用链分析(代码片段)
...理json数据格式的解析库,它支持将java对象解析成json字符串格式的数据,也可以将json字符串还原成java对象。不难看出,java对象转换成json数据就是序列化操作,而将json数据还原成java对象就是反序列化过程。1.fastj... 查看详情
利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组利用fastjosn将.json文件反序列化为java.class和java.util.Listfastjson是一个性能很好的Java语言实现的JSON解析器和生成器,来自阿里巴巴的工程师开发。【主要特点】1、快速FAST(比其它任何基于Java... 查看详情
asm在fastjson中的应用
...整体的性能。序列化序列化就是将对象转换成Json格式的字符串,然后用来持久化或者网络传输;FastJson提供了接口类ObjectSerializer:publicinterfaceObjectSeria 查看详情
序列化
协议序列化采用fastjson FastJSON简单使用序列化就是指把对象转成JSON格式的字符串将Map转成JSON1Map<String,Object>map=newHashMap<String,Object>();2map.put("key1","One");3map.put("key2","Two");45StringmapJson=JSON.toJSON 查看详情
vulhub漏洞复现fastjson1.2.24反序列化漏洞
...va库,可以将Java对象转换为JSON格式,也可以将JSON字符串转换为Java对象。漏洞成因:目标网站在解析json时,未对json内容进行验证,直接将json解析成java对象并执行,攻击者构造对应的payload,让系统执... 查看详情
fastjson-bcel不出网打法原理分析(代码片段)
...过程中自动调用类属性的setter方法和getter方法,将JSON字符串还原成对象,当这些自动调用的方法中存在可利用的潜在危险代码时,漏洞便产生了。fastjson用法:1.将字符串转换为json格式,通过key获取value:c... 查看详情
fastjson序列化乱序问题
1、初始化为有序json对象JSONObjectjsonOrdered=newJSONObject(true);2、将String对象转换过程中,不要调整顺序JSONObjectjsonOrdered=JSONObject.parseObject(jsonString,Feature.OrderedField); 查看详情
通过fastjson将一个对象序列化为json,同时加入指定的序列化逻辑
主函数:importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.serializer.ValueFilter;importcom.google.common.base.Preconditions;publicclassxiaomi{publicstaticvoidmain(String[]args){Aa=newA();Stringjs 查看详情
[java安全]fastjson学习(代码片段)
...f0c;可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在的没有源码的对象。它关键的方法就是三个:将对象转换成JSON字符串 查看详情
[java安全]fastjson学习(代码片段)
...f0c;可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在的没有源码的对象。它关键的方法就是三个:将对象转换成JSON字符串 查看详情
java中使用fastjson进行对象的序列化和反序列化
Java中使用FastJSON进行对象的序列化和反序列化1.添加依赖,maven的pom.xml文件中添加以下依赖<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>& 查看详情
java对象数据与json对象数据之间的相互转换(fastjson)(代码片段)
...FastJson常用的JSON格式转换4.1、测试案例4.2、将JSON格式的字符串转换为json对象4.3、将JSON字符串或者JSON对象转成Java对象4.4、将Java对象转换成JSON对象,toJSONString4.5、将JSON数组字符串转换成Java中List集合对象,parseObjec或者par... 查看详情
json字符串转成json对象json对象转换成java对象(代码片段)
importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;依赖包<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1. 查看详情
fastjson序列化时过滤字段(属性)的方法总结(代码片段)
FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。方法一、FastJson的注解@JSONField(serialize=false)privateStringname; 最便捷,... 查看详情
fastjson序列化将null变成空字符串
参考技术Afastjson默认将null的key去掉,由于记录日志需要字段必须是全的,所以让fastjson序列化的时候将null变成空字符串 查看详情