首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LocalDateTime -用LocalDateTime.parse进行反序列化

LocalDateTime -用LocalDateTime.parse进行反序列化
EN

Stack Overflow用户
提问于 2016-05-11 14:50:14
回答 3查看 33.5K关注 0票数 21

我有字段initiationDate,它通过ToStringSerializer类序列化为ISO-8601格式.

代码语言:javascript
运行
复制
@JsonSerialize(using = ToStringSerializer.class)
private LocalDateTime initiationDate;

当我收到以下JSON时,

代码语言:javascript
运行
复制
...
"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构造函数/工厂方法。

我怎样才能做到这一点?如何指定工厂方法?

编辑:

通过将jsr310 310模块包含到项目中并将@JsonDeserializeLocalDateTimeDeserializer结合使用,解决了这个问题。

代码语言:javascript
运行
复制
@JsonSerialize(using = ToStringSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime initiationDate;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-11 15:24:02

Vanilla没有从任何JSON字符串值中反序列化(一个LocalDateTime对象)的方法。

你有几个选择。您可以创建和注册您自己的JsonDeserializer,它将使用LocalDateTime#parse

代码语言:javascript
运行
复制
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;

或者,可以将扩展添加到类路径中,并向ObjectMapper注册适当的Module

代码语言:javascript
运行
复制
objectMapper.registerModule(new JavaTimeModule());

让杰克逊替你做皈依。在内部,这与标准格式之一一起使用LocalDateTime#parse。幸运的是,它支持这样的值

代码语言:javascript
运行
复制
2016-05-11T17:32:20.897

从盒子里出来。

票数 31
EN

Stack Overflow用户

发布于 2017-06-05 14:02:02

对于那些想要解析自定义日期时间格式的人。

1)添加依赖项

代码语言:javascript
运行
复制
compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.8"

2)日期时间格式的Json注释。

代码语言:javascript
运行
复制
public class ClientRestObject {

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime timestamp;

}

3)在Java8中注册ObjectMapper模块

代码语言:javascript
运行
复制
private static ObjectMapper buildObjectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    //To parse LocalDateTime
    objectMapper.registerModule(new JavaTimeModule());
    return objectMapper;
}
票数 9
EN

Stack Overflow用户

发布于 2022-05-04 18:04:04

代码语言:javascript
运行
复制
ObjectMapper objectMapper = new ObjectMapper();
//To parse LocalDateTime
objectMapper.registerModule(new JavaTimeModule());

这对我有用,谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37166217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档