fastjson将字符串转java对象日期序列化异常日期格式报错解决(代码片段)

抓手 抓手     2023-03-26     220

关键词:

异常信息 

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变成空字符串 查看详情