当前位置: 首页 > 知识库问答 >
问题:

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

邢骏
2023-03-14

我有一个字段initiationdate,它通过ToStringSerializer类序列化为ISO-8601格式。

@JsonSerialize(using = ToStringSerializer.class)
private LocalDateTime initiationDate;

当我收到以下JSON时,

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

通过将jackson-datatype-jsr310模块包含到项目中,并使用@jsonDeserializeLocalDateTimeDeserializer解决了这个问题。

@JsonSerialize(using = ToStringSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime initiationDate;

共有1个答案

姬昀
2023-03-14

Vanilla Jackson没有方法从任何JSON字符串值反序列化LocalDateTime对象。

你有几个选择。您可以创建和注册自己的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;

或者,可以将Jackson的java.time扩展添加到类路径中,并将适当的模块注册到ObjectMapper中。

objectMapper.registerModule(new JavaTimeModule());
2016-05-11T17:32:20.897

开箱即用。

 类似资料:
  • 问题内容: 我有按类别序列化为ISO-8601格式的字段。 当我收到以下JSON时, 我想通过工厂方法反序列化。我所有的尝试都以: 无法从值()实例化类型[简单类型,类]的值;没有单一的构造函数/工厂方法 我该如何实现?如何指定工厂方法? 编辑: 通过将jackson-datatype-jsr310模块包含到项目中并与一起使用,解决了该问题 。 问题答案: 香草杰克逊没有一种方法来 反序列化 一个

  • 问题内容: 我已经在SO中阅读了一些关于答案的问题,这些问题与JSON属性之间的序列化和反序列化有关,但我似乎无法使其正常工作。 我已经设法将Spring Boot应用程序配置为以所需的格式()返回日期,但在以JSON格式接收值时遇到问题。 这些是我到目前为止所做的所有事情: 增加了对Maven的依赖: 在我的主要课程中指定: 禁用序列化作为时间戳记: 这是我的日期时间实体映射: 在我的数据库中,

  • 我已经将Spring Boot应用程序配置为以我希望的格式()返回日期,但是在JSON中接受这种格式的值有问题。 这些都是我到目前为止所做的事情: 为添加了maven依赖项: 在我的数据库中,我以以下格式将此日期存储为时间戳:。 如果我通过我的控制器访问这个实体,它将返回具有正确startDate格式的JSON。但是,当我尝试使用格式发布并反序列化它时,我会遇到以下异常: 我知道有很多关于这个话题

  • 我正在尝试使用Jackson将反序列化为,但它不起作用。 我有一个带有LocalDateTime字段的数据类: 我添加了特殊的Jackson数据类型模块: 序列化可以在以下情况下正常工作: 结果字符串: 但反序列化不适用于: 作为错误,我得到: 我错过了什么?我对串行化有效而反序列化无效感到困惑。 MWE:(小格拉德尔Java项目) Main.java: build.gradle:

  • 来自REST服务的json对象 使用JacksonInFiveMinutes中的代码 ObjectMapper mapper=new ObjectMapper(); Map userData=mapper.read值(webResource.queryParams(queryParams). get(String.class);, Map.class); 在哪里: 从REST服务返回json 从J

  • 我们在elasticsearch索引中有一个日期字段,其中填充了一个长的。 字段映射为: 我使用和进行此配置: 但是当我试图用一个字段解析索引中的实体时,例如: 我收到一个错误: 我认为,可以将一个长的反序列化为一个日期,但我看不出我遗漏了什么。 如果我把它映射到Long,它当然会起作用,如果值存储为String,并且我们在JsonFormat中正确地对其进行造型和格式化,它也会起作用。但是有没有