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

Jackson:InvalidFormatException:无法从字符串值构造java.util.Date的实例,java,json,date,serialization,jackson,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 setT

根据文件,这很简单

我的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;
    }
}
2018-10-30 12:44:34.270
我试着把它和杰克逊联系起来,就像这样:

ObjectMapper mapper = new ObjectMapper();
Message message = mapper.readValue(message, Message.class);
传入日期字符串如下所示:

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;
    }
}
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'")
不知道我还能做什么。我不能改变传入的格式,所以这是我必须接受的


提前感谢。

问题不在您预期的范围内:

JSON输入中的名称
时间戳

{ "timestamp": "2018-10-30 12:44:34.270" }
只是与Java类
消息中的名称
\u timestamp
不匹配

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS")
private Date _timestamp;
有几种替代方法可以使其匹配:

  • 在JSON输入中,将“时间戳”更改为“时间戳”
  • 在Java代码更改
    Date\u时间戳中至<代码>日期时间戳
    (并相应地使用getter和setter更改代码)
  • 在Java代码中添加注释
    @JsonProperty(“timestamp”)
    到您的
    日期\u时间戳定义

  • 尝试使用@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyyy-MM-dd'HH:MM:ss.SSS”)将日期更改为LocalDateTime@TridevChaudhary结果为:com.fasterxml.jackson.databind.JsonMappingException:无法从字符串值('2018-10-30 13:13:16.988')实例化类型[simple type,class java.time.LocalDateTime]的值;在[Source:(String)](通过引用链:com.me.model.Message[“timestamp”])没有单个字符串构造函数/工厂方法。您可能必须编写自定义反序列化程序。检查此问题,我无法重现您的问题。使用
    Message
    类和JSON输入
    {“\u timestamp”:“2018-10-30 12:44:34.270”}
    对我来说效果很好。你需要使用
    \u timestamp
    ,而不是
    timestamp
    。谢谢你的帮助。如果错误没有那么误导,那就太好了。