LocalDateTime-使用LocalDateTime.parse反序列化
我有initiationDate
按ToStringSerializer
类别序列化为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.LocalDateTime
从String
值('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