【问题标题】:Field getting serialized without implementing Serializable interface字段在没有实现 Serializable 接口的情况下被序列化
【发布时间】:2018-03-17 23:39:37
【问题描述】:

我有一个实现 Serializable 接口的 java 类。它具有可序列化的 String、BigDecimal 和其他 java 预定义类型。它还包括一个不实现 Serializable 的自定义类。自定义类型也被序列化为 JSON。

但是有警告显示要么使其成为瞬态,要么使自定义类型实现可序列化。

即使类型没有实现 Serializable ,它是如何被序列化的?我应该忽略警告(SonarLint 消息)吗?

【问题讨论】:

  • 通过 JSON。显然它要么有错误,要么不在乎。

标签: java serialization jackson-databind


【解决方案1】:

这是因为 Jackson 在序列化/反序列化时不使用 java.lang.Serializable 类型提示。 Jackson 可以序列化/反序列化大多数 Java 类型。看看com.fasterxml.jackson.databind.ser.stdcom.fasterxml.jackson.databind.deser.std。如果你使用ObjectMapper,你可以像guide一样配置所需的功能。

忽略警告取决于您的对象类型。例如,关于值类型序列化的讨论很好。

Why should Java's value-based classes not be serialized?

【讨论】:

  • 那么实现 Serializable 有什么用呢?另外为了删除警告,我在类型中添加了 transient 关键字,这应该没问题,因为 Jackson 忽略了它
  • “那么实现Serializable有什么用呢?”——比如在使用Java标准对象序列化机制的时候!对象输入流/对象输出流。 Jackson 是一个第三方库。
  • @StephenC 所以 JPA 使用这种机制?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 2014-11-14
相关资源
最近更新 更多