java - Jackson 对象映射器 com.fasterxml.jackson.databind.exc.MismatchedInputException
问题描述
我正在尝试运行以下 Junit 测试:
@Test
public void testObjectMapper() throws IOException {
String json = new ObjectMapper().writeValueAsString(Instant.now());
ObjectMapper om = new ObjectMapper()
.registerModule(new JavaTimeModule())
.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
om.readValue(json, Instant.class);
}
但得到以下异常:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected one of [VALUE_STRING, VALUE_NUMBER_INT, VALUE_NUMBER_FLOAT] for java.time.Instant value
at [Source: (String)"{"nano":627594000,"epochSecond":1581946138}"; line: 1, column: 1]
不知道为什么我无法将 (String)"{"nano":627594000,"epochSecond":1581946138}" 反序列化为 Instant 类。
需要帮忙!
解决方案
您应该使用用于反序列化Instant
的相同序列化您的。ObjectMapper
ObjectMapper om = new ObjectMapper()
.registerModule(new JavaTimeModule())
.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
String json = om.writeValueAsString(Instant.now());
om.readValue(json, Instant.class);
推荐阅读
- pine-script - 使用plotshape时如何使shapel自动显示?
- tensorflow - PyTorch 等效于 Tensorflow 线性层
- r - 如何制作高平滑、高分辨率的粒子运动动画
- debugging - Xcode 11.2.1 上的 com.apple.dt.SKAgent 消耗所有资源
- python - 如何从字符串python中删除所有表情符号(unicode)字符
- javascript - 参考错误“'状态中的数组名称'未定义”
- mysql - 在一个查询中更新多个字段
- mysql - 如何找出哪个表使用特定的外键值?
- c - C字计数器和标点计数器
- cockroachdb - pq.NewListener/Listen 带有 pq 的块:在“listen”处或附近出现语法错误