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] #1349

Closed
clear-stack opened this issue Apr 12, 2023 · 6 comments
Closed

[BUG] #1349

clear-stack opened this issue Apr 12, 2023 · 6 comments
Labels
bug Something isn't working
Milestone

Comments

@clear-stack
Copy link

问题描述

简要描述您碰到的问题。

实体类有日期字段如下:

@JSONField(locale = "zh", format = "yyyy-mm-dd")
private Date enddate;

环境信息

请填写以下信息:
android开发环境

重现步骤

如何操作可以重现该问题:

  1. 当第三方接口数据返回日期为时间戳:1863792000000,在序列化该实体对象的时候异常
    W/System.err: Caused by: java.time.format.DateTimeParseException: Text '1863792000000' could not be parsed at index 0
    W/System.err: at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    W/System.err: at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    W/System.err: at java.time.LocalDate.parse(LocalDate.java:394)
    W/System.err: at com.alibaba.fastjson2.reader.FieldReaderDateTimeCodec.readFieldValue(FieldReaderDateTimeCodec.java:261)
    W/System.err: at com.alibaba.fastjson2.reader.ObjectReaderBean.readObject(ObjectReaderBean.java:331)
    W/System.err: at com.alibaba.fastjson2.reader.FieldReaderObject.readFieldValue(FieldReaderObject.java:146)

### 期待的正确结果
*对您期望发生的结果进行清晰简洁的描述。*
在旧版本fastjson模式下就不会有问题,希望能继续支持时间戳的转换
 
@clear-stack clear-stack added the bug Something isn't working label Apr 12, 2023
@wenshao wenshao added this to the 2.0.28 milestone Apr 12, 2023
@wenshao
Copy link
Member

wenshao commented Apr 13, 2023

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.28-SNAPSHOT/
问题已修复,请帮忙有2.0.8-SNAPSHOT版本验证,2.0.28版本预计会在周末发布

@wenshao wenshao added the fixed label Apr 13, 2023
@clear-stack
Copy link
Author

image

[fastjson2-2.0.28-20230408.010452-1.jar]
貌似这个版本依旧不行

@wenshao
Copy link
Member

wenshao commented Apr 15, 2023

https://github.com/alibaba/fastjson2/releases/tag/2.0.28
我本地测试是好的,你更新到2.0.28正式版本试试看

wenshao added a commit that referenced this issue Apr 15, 2023
@clear-stack
Copy link
Author

经测试,在非android环境下,在idea中测试没有问题。

但是在AndroidStudio环境中依旧 报错,但是和第一次我发的报错不一样了,如下所示:
error

android使用的JDK是内置的如图:
image

@wenshao wenshao removed the fixed label Apr 18, 2023
wenshao added a commit that referenced this issue Apr 22, 2023
@wenshao
Copy link
Member

wenshao commented Apr 22, 2023

https://github.com/alibaba/fastjson2/releases/tag/2.0.29
问题已修复,请用新版本

@wenshao wenshao closed this as completed Apr 22, 2023
@clear-stack
Copy link
Author

经测试,在没有嵌套的时候android环境已经正常了,但是在有嵌套对象的时候依旧有异常:
我把测试数据发出来:
后台返回的测试文本数据如下:
{
"app":
{"clientcode":52302,"appdesc":"nfc云解码","eidmcid":"009iii","eidappid":"kkkkkk","clientport":9989,"desinfo":"eid云解码V2.1.4.beat","url":"url","logout":0,"enddate":1863792000000,"appname":"生产nfc云解码","appid":"1C1154257E22C7C8C63814B4B3832308","clientip":"eidcloudread.eidlink.com","skey":"nvRywksjFpIP5g88OnUrmfXjKNeeX6OJ2AmukmAy7rWhxyz8mu9LZjrdmBcocQ9a","appcode":"eidSZNfc","keystart":10,"versioncode":94,"versionname":"eid云解码V2.1.4.beat"},
"user":{"devid":"4B1011C167EE8B821BFBB6FC1A7C6E0D","authstatus":1,"createtime":1681115015000,"creator":"NullLogin","areaname":"宝安区西乡街道","readmode":0,"userid":"C70C48D656BE4ECF92AABAB4968C980D","authtype":2,"updater":"B75A783E1E30C0A51CB9757FC28C9655","logout":0,"areaid":440306018000000000,"authdate":1893340800000,"phone":"17312340000","appid":"1C1154257E22C7C8C63814B4B3832308","name":"Liyc","id":"C70C48D656BE4ECF92AABAB4968C980D","updatetime":1681115583000}
}

//最终目标是要把文本数据反序列化成BackBean 对象
BackBean back = JSONObject.parseObject(text, BackBean.class);

以下是各个对象的原始信息如下:

BackBean 对象如下:
public class BackBean {
private static final long serialVersionUID = 1L;
private AppBean app;

private UserBean user;

public AppBean getApp() {
    return app;
}

public void setApp(AppBean app) {
    this.app = app;
}

public UserBean getUser() {
    return user;
}

public void setUser(UserBean user) {
    this.user = user;
}

}

UserBean对象如下:
public class UserBean {
private static final long serialVersionUID = 1L;

private Long areaid;

private String areaname;

private String appid;

private String name;

private String phone;
 
private Integer cardtype;

private String cardno;

private String userid;

private String unitname;

private Integer logout;

private String devid;

private Integer authtype;

private Integer authstatus;

@JSONField(locale = "zh", format = "yyyy-MM-dd")
private Date authdate;

private String desinfo;

private Integer readmode;

public Long getAreaid() {
    return areaid;
}

public void setAreaid(Long areaid) {
    this.areaid = areaid;
}

public String getAreaname() {
    return areaname;
}

public void setAreaname(String areaname) {
    this.areaname = areaname;
}

public String getAppid() {
    return appid;
}

public void setAppid(String appid) {
    this.appid = appid;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

public Integer getCardtype() {
    return cardtype;
}

public void setCardtype(Integer cardtype) {
    this.cardtype = cardtype;
}

public String getCardno() {
    return cardno;
}

public void setCardno(String cardno) {
    this.cardno = cardno;
}

public String getUserid() {
    return userid;
}

public void setUserid(String userid) {
    this.userid = userid;
}

public String getUnitname() {
    return unitname;
}

public void setUnitname(String unitname) {
    this.unitname = unitname;
}

public Integer getLogout() {
    return logout;
}

public void setLogout(Integer logout) {
    this.logout = logout;
}

public String getDevid() {
    return devid;
}

public void setDevid(String devid) {
    this.devid = devid;
}

public Integer getAuthtype() {
    return authtype;
}

public void setAuthtype(Integer authtype) {
    this.authtype = authtype;
}

public Integer getAuthstatus() {
    return authstatus;
}

public void setAuthstatus(Integer authstatus) {
    this.authstatus = authstatus;
}

public Date getAuthdate() {
    return authdate;
}

public void setAuthdate(Date authdate) {
    this.authdate = authdate;
}

public String getDesinfo() {
    return desinfo;
}

public void setDesinfo(String desinfo) {
    this.desinfo = desinfo;
}

public Integer getReadmode() {
    return readmode;
}

public void setReadmode(Integer readmode) {
    this.readmode = readmode;
}

}

AppBean继承了AppInfo:
public class AppBean extends AppInfo {
private static final long serialVersionUID = 1L;

private String appid;

private Integer logout;

private String skey;

private Integer keystart;

private String eidmcid;

private String eidappid;

private String clientip;

private Integer clientport;

private Integer clientcode;

@JSONField(locale = "zh", format = "yyyy-MM-dd")
private Date enddate;

public String getAppid() {
    return appid;
}

public void setAppid(String appid) {
    this.appid = appid;
}

public Integer getLogout() {
    return logout;
}

public void setLogout(Integer logout) {
    this.logout = logout;
}

public String getSkey() {
    return skey;
}

public void setSkey(String skey) {
    this.skey = skey;
}

public Integer getKeystart() {
    return keystart;
}

public void setKeystart(Integer keystart) {
    this.keystart = keystart;
}

public String getEidmcid() {
    return eidmcid;
}

public void setEidmcid(String eidmcid) {
    this.eidmcid = eidmcid;
}

public String getEidappid() {
    return eidappid;
}

public void setEidappid(String eidappid) {
    this.eidappid = eidappid;
}

public String getClientip() {
    return clientip;
}

public void setClientip(String clientip) {
    this.clientip = clientip;
}

public Integer getClientport() {
    return clientport;
}

public void setClientport(Integer clientport) {
    this.clientport = clientport;
}

public Integer getClientcode() {
    return clientcode;
}

public void setClientcode(Integer clientcode) {
    this.clientcode = clientcode;
}

public Date getEnddate() {
    return enddate;
}

public void setEnddate(Date enddate) {
    this.enddate = enddate;
}

}

AppInfo对象如下:
public class AppInfo implements Serializable {
private static final long serialVersionUID = 1L;

private String appcode;

private String appname;

private String appdesc;

private Integer versioncode = 0;

private String versionname;

private String desinfo;

private String url;

private boolean force = true;

public String getAppcode() {
    return appcode;
}

public void setAppcode(String appcode) {
    this.appcode = appcode;
}

public String getAppname() {
    return appname;
}

public void setAppname(String appname) {
    this.appname = appname;
}

public String getAppdesc() {
    return appdesc;
}

public void setAppdesc(String appdesc) {
    this.appdesc = appdesc;
}

public Integer getVersioncode() {
    return versioncode;
}

public void setVersioncode(Integer versioncode) {
    this.versioncode = versioncode;
}

public String getVersionname() {
    return versionname;
}

public void setVersionname(String versionname) {
    this.versionname = versionname;
}

public String getDesinfo() {
    return desinfo;
}

public void setDesinfo(String desinfo) {
    this.desinfo = desinfo;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public boolean isForce() {
    return force;
}

public void setForce(boolean force) {
    this.force = force;
}

}

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

No branches or pull requests

2 participants