Jackson 无法反序列化从 Golang 设置的日期 Api
Jackson can't deserialize date set from Golang Api
我正在开发 Golang 微服务,它使用基于 Java 的 BDD 黄瓜测试。
架构中有一个日期变量,定义为:
startDate *time.Time
我把这个值设置为:
t := time.Now()
startDate = &t
当我通过 Java 程序 运行 BDD 时,出现此错误:
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String "2021-06-11T10:53:57.1124553+05:30": not a valid representation (error: Failed to parse Date value '2021-06-11T10:53:57.1124553+05:30': Unparseable date: "2021-06-11T10:53:57.1124553+05:30")
在我的 BDD 测试中,我有:
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(dateFormat);
我对 Golang 比较陌生,在处理日期时遇到问题。
到目前为止,我已经尝试过:
t := time.Now().Format(time.RFC3339)
tt, _ := time.Parse(time.RFC3339, t)
startDate = &tt
我什至尝试过 time.LoadLocation()
,但我无法找出问题所在。
您提供的 Go 代码不会影响 Time
实例序列化的方式,因为您在将其序列化为 string
后将其解析回 Time
。
如果您可以控制日期字段的序列化方式,则可以应用以下格式,该格式应与您提供给 Jackson ObjectMapper
的内容保持一致:
now := time.Now()
formattedDate := now.Format("2006-01-02T15:04:05.000Z0700")
如果您无法控制 Go 端的日期序列化方式,您还可以在 Java 端调整日期格式。以下示例假设 Go 使用 time.RFC3339
:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
我正在开发 Golang 微服务,它使用基于 Java 的 BDD 黄瓜测试。
架构中有一个日期变量,定义为:
startDate *time.Time
我把这个值设置为:
t := time.Now()
startDate = &t
当我通过 Java 程序 运行 BDD 时,出现此错误:
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String "2021-06-11T10:53:57.1124553+05:30": not a valid representation (error: Failed to parse Date value '2021-06-11T10:53:57.1124553+05:30': Unparseable date: "2021-06-11T10:53:57.1124553+05:30")
在我的 BDD 测试中,我有:
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(dateFormat);
我对 Golang 比较陌生,在处理日期时遇到问题。
到目前为止,我已经尝试过:
t := time.Now().Format(time.RFC3339)
tt, _ := time.Parse(time.RFC3339, t)
startDate = &tt
我什至尝试过 time.LoadLocation()
,但我无法找出问题所在。
您提供的 Go 代码不会影响 Time
实例序列化的方式,因为您在将其序列化为 string
后将其解析回 Time
。
如果您可以控制日期字段的序列化方式,则可以应用以下格式,该格式应与您提供给 Jackson ObjectMapper
的内容保持一致:
now := time.Now()
formattedDate := now.Format("2006-01-02T15:04:05.000Z0700")
如果您无法控制 Go 端的日期序列化方式,您还可以在 Java 端调整日期格式。以下示例假设 Go 使用 time.RFC3339
:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");