我有一个字段initiationdate
,它通过ToStringSerializer
类序列化为ISO-8601格式。
@JsonSerialize(using = ToStringSerializer.class)
private LocalDateTime initiationDate;
当我收到以下JSON时,
...
"initiationDate": "2016-05-11T17:32:20.897",
...
通过将jackson-datatype-jsr310模块包含到项目中,并使用@jsonDeserialize
和LocalDateTimeDeserializer
解决了这个问题。
@JsonSerialize(using = ToStringSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime initiationDate;
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中正确地对其进行造型和格式化,它也会起作用。但是有没有