Jackson:InvalidFormatException:无法从字符串值构造java.util.Date的实例

时间:2018-10-30 13:07:06

标签: java json date serialization jackson

根据文档,非常简单。

我的POJO字段如下:

public class Message {
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    private Date _timestamp;

    public Date getTimestamp() {
        return _timestamp;
    }

    public void setTimestamp(Date timestamp) {
        this._timestamp = timestamp;
    }
}

我尝试像这样用Jackson映射它:

ObjectMapper mapper = new ObjectMapper();
Message message = mapper.readValue(message, Message.class);

传入的日期字符串如下所示:

2018-10-30 12:44:34.270

我收到以下错误:

com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String value '2018-10-30 12:44:34.270': not a valid representation (error: Failed to parse Date value '2018-10-30 12:44:34.270': Can not parse date "2018-10-30 12:44:34.270": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

我尝试了以下操作,但错误没有改变:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSSZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")

不确定我还能做什么。我无法更改传入的格式,所以这是我必须忍受的。

谢谢。

1 个答案:

答案 0 :(得分:1)

问题不在您预期的位置:

JSON输入中的名称timestamp

{ "timestamp": "2018-10-30 12:44:34.270" }

与您的Java类_timestamp

中的名称Message根本不匹配
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS")
private Date _timestamp;

有几种方法可以使其匹配:

  • 在JSON输入中,将"timestamp"更改为"_timestamp"
  • 在Java代码中,将Date _timestamp;更改为Date timestamp;
    (并相应地使用getter和setter更改代码)
  • 在Java代码中添加注释@JsonProperty("timestamp") 您的Date _timestamp;定义