杰克逊无法从 Golang API 反序列化日期集



我正在开发一个Golang Micro服务,该服务使用基于Java的Cucumber测试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);

我对果朗还比较陌生,在约会时也会遇到一些问题。

到目前为止,我已经尝试过:

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");

最新更新