Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] 反序列化java.sql.Timestamp报错:NoSuchMethodException: java.sql.Timestamp.valueOf #1272

Closed
magic-zagan opened this issue Mar 23, 2023 · 3 comments
Labels
bug Something isn't working fixed
Milestone

Comments

@magic-zagan
Copy link

问题描述

Android端直接使用的java服务端提供的VO层Jar包依赖,其中出参参数birthday使用java.sql.Timestamp类型;

Android端反序列化birthday参数时报错:
java.lang.NoSuchMethodException: java.sql.Timestamp.valueOf [class java.time.LocalDateTime]

环境信息

  • OS信息: Win10
  • JDK信息: JDK 1.8
  • 版本信息:FastJson2 2.0.27-SNAPSHOT(2.0.26也存在这个问题)

重现步骤

我的独立测试代码如下:

val json = """
            {
               "msg": "请求成功",
               "code": 200,
               "data": {
                  "birthday": "1993-07-03T16:00:00.000+00:00",
                  "uid": "1",
                  "gender": "MALE",
                  "nickName": "斗战胜佛",
                  "intro": "超级管理员",
                  "avatar": "http:\/\/dev.minio.fastdev.cloud\/fastdev\/account\/avatar\/87a9d73be2204143934792ed4143411a?
            X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minio%2F20230323%2Ffastdev%2Fs3%2Faws4_request&X-Amz-Date=20
            230323T113238Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=39e7c831d2d278ed52ced5c546685f2482
            06d7ce5cdd9b473eece01af537524f"
               },
               "showType": "SILENT"
            }
        """.trimIndent()

val res = JSON.parseObject(json, object : TypeReference<ProDataRes<UserInfoDTO>>() {})

可以定义一个包含java.sql.Timestamp的对象,进行反序列化测试;
同时反序列化JSON的时间值为 "1993-07-03T16:00:00.000+00:00" 格式(后台使用的是FastJson1版本)

期待的正确结果

能够对 "1993-07-03T16:00:00.000+00:00" 正确进行反序列化

相关日志输出

Caused by: java.lang.NoSuchMethodException: java.sql.Timestamp.valueOf [class java.time.LocalDateTime]
        at java.lang.Class.getMethod(Class.java:2072)
        at java.lang.Class.getMethod(Class.java:1693)
        at com.alibaba.fastjson2.util.JdbcSupport$TimestampReader.<init>(JdbcSupport.java:494)
        at com.alibaba.fastjson2.util.JdbcSupport.createTimestampReader(JdbcSupport.java:41) 
        at com.alibaba.fastjson2.reader.ObjectReaderBaseModule.getObjectReader(ObjectReaderBaseModule.java:2083) 
        at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:902) 
        at com.alibaba.fastjson2.JSONReader$Context.getObjectReader(JSONReader.java:3508) 
        at com.alibaba.fastjson2.reader.FieldReaderObject.readFieldValue(FieldReaderObject.java:106) 
        at com.alibaba.fastjson2.reader.ObjectReader6.readObject(ObjectReader6.java:378) 
        at com.alibaba.fastjson2.reader.FieldReaderObject.readFieldValue(FieldReaderObject.java:295) 
        at com.alibaba.fastjson2.reader.ObjectReaderNoneDefaultConstructor.readObject(ObjectReaderNoneDefaultConstructor.java:291) 
        at com.alibaba.fastjson2.JSON.parseObject(JSON.java:786) 

附加信息

看代码是在 com.alibaba.fastjson2.util.JdbcSupport :

public TimestampReader(Class objectClass, String format, Locale locale) {
            super(format, locale);
            try {
                constructor = objectClass.getConstructor(long.class);
                methodSetNanos = objectClass.getMethod("setNanos", int.class);
                // ↓ 这里  似乎是尝试获得timestamp的valueOf方法,参数为LocalDateTime类型,但Timestamp只有String类型的valueOf
                methodValueOf = objectClass.getMethod("valueOf", LocalDateTime.class);
            } catch (NoSuchMethodException e) {
                throw new IllegalStateException("illegal stat", e);
            }
        }
@magic-zagan magic-zagan added the bug Something isn't working label Mar 23, 2023
@wenshao wenshao added this to the 2.0.27 milestone Mar 24, 2023
@wenshao
Copy link
Member

wenshao commented Mar 24, 2023

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.27-SNAPSHOT/
问题已修复,请帮忙用2.0.27-SNAPSHOT版本验证

@magic-zagan
Copy link
Author

验证通过

@wenshao
Copy link
Member

wenshao commented Apr 8, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working fixed
Projects
None yet
Development

No branches or pull requests

2 participants