尝试使用杰克逊序列化空瞬间时出错

Posted

技术标签:

【中文标题】尝试使用杰克逊序列化空瞬间时出错【英文标题】:error trying to serialize null instant using jackson 【发布时间】:2021-01-03 14:53:15 【问题描述】:

杰克逊尝试序列化空即时对象时遇到了一些问题。在我的数据库模型中,我有一些可以为空的时间戳,我希望能够像这样将它们发送给客户端。

问题是,当我生成响应时,我总是看到这些错误:

Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain:...

通过调试 y 显示该字段是 Instant。这是有问题的吸气剂...

    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    public Instant getStartTime() 
        return startTime.toInstant();
    

我尝试对字段、getter 和整个类使用 @JsonInclude 注释,但我仍然收到该消息和客户端上的 500。

我正在使用包含 jackson 2.11.0 的 Spring-boot。

非常感谢

【问题讨论】:

【参考方案1】:

您需要先检查变量startTime 不是null

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public Instant getStartTime() 
    return startTime != null ? startTime.toInstant() : null;

Jackson 调用 getter 并检查 value 是否为 null。但是在调用getter 时会抛出NullPointerException

【讨论】:

我需要多睡觉 :facepalm: 非常感谢! @Acampoh,没问题。有时我们只见树木不见森林。评论SO 支持 unicode 符号:?。 ?

以上是关于尝试使用杰克逊序列化空瞬间时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何用杰克逊反序列化空字符串?

杰克逊:反序列化(解析)空Unicode

杰克逊:忽略空@XmlWrapperElement 集合中的空格

当我尝试反序列化对象列表时,杰克逊抛出错误映射异常

杰克逊序列化没有正确处理单引号

杰克逊在测试期间的 Access.WRITE_ONLY 空