LocalDateTime-使用LocalDateTime.parse反序列化

我有initiationDateToStringSerializer类别序列化为ISO-8601格式的字段。

@JsonSerialize(using = ToStringSerializer.class)

private LocalDateTime initiationDate;

当我收到以下JSON时,

...

"initiationDate": "2016-05-11T17:32:20.897",

...

我想通过LocalDateTime.parse(CharSequence

text)工厂方法反序列化。我所有的尝试都以com.fasterxml.jackson.databind.JsonMappingException

无法java.time.LocalDateTimeString值('2016-05-11T17:32:20.897')实例化类型[简单类型,类]的值;没有单一的String构造函数/工厂方法

我该如何实现?如何指定工厂方法?


编辑:

通过将jackson-datatype-jsr310模块包含到项目中并与一起使用@JsonDeserialize,解决了该问题

LocalDateTimeDeserializer

@JsonSerialize(using = ToStringSerializer.class)

@JsonDeserialize(using = LocalDateTimeDeserializer.class)

private LocalDateTime initiationDate;

回答:

香草杰克逊没有一种方法来 一个LocalDateTime从任何JSON字符串值对象。

您有几种选择。您可以创建和注册自己的JsonDeserializer使用方法LocalDateTime#parse

class ParseDeserializer extends StdDeserializer<LocalDateTime> {

public ParseDeserializer() {

super(LocalDateTime.class);

}

@Override

public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {

return LocalDateTime.parse(p.getValueAsString()); // or overloaded with an appropriate format

}

}

...

@JsonSerialize(using = ToStringSerializer.class)

@JsonDeserialize(using = ParseDeserializer.class)

private LocalDateTime initiationDate;

或者你也可以添加杰克逊的java.time延伸到类路径中并注册相应的Module与你的ObjectMapper

objectMapper.registerModule(new JavaTimeModule());

让杰克逊为您做转换。在内部,这LocalDateTime#parse与一种标准格式一起使用。幸运的是,它支持像

2016-05-11T17:32:20.897

盒子外面。

以上是 LocalDateTime-使用LocalDateTime.parse反序列化 的全部内容, 来源链接: utcz.com/qa/399984.html

回到顶部