【问题标题】:serialVersionUID needs to be updated everytime I make changes in my JSF project每次我在 JSF 项目中进行更改时,都需要更新 serialVersionUID
【发布时间】:2020-10-02 22:07:33
【问题描述】:

很烦人,每次我在我的managedbean中进行更改,我都需要生成一个新的序列版本id,以便在我的项目中进行更改,这很不方便,我以为我的服务器有问题所以我重新启动了我的apache几次,现在我发现应该删除serialversion id然后一遍又一遍地生成,我这JSF是如何工作的?

编辑: 现在每次我对代码进行更改都会变得很糟糕,我会删除序列号,生成一个新的,然后再次生成,否则如果不应用更改,非常糟糕

编辑: 现在我的项目运行正常,对我的问题的简单回答是,我没有生成serialVersionID 并且总是清理项目。有时 IDE 不会检测到其他类的变化,因此您需要清理并重新启动服务器。

【问题讨论】:

  • 这不是 JSF 的工作方式。从来没有这个问题。虽然答案可能描述了串行版本的用途,但它不是 imo 的 jsf 问题。和'apache'重启?如果你的意思是;Tomcat;我能理解
  • 答案不属于答案中的编辑

标签: java jsf jsf-2


【解决方案1】:

好吧,serialVersionUID 的目的是处理类中的更改,当序列化和反序列化对象的类的代码不同时,这些更改将(或可能)导致问题。有几种方法:

  1. 不要使用serialVersionUID 字段。 JVM 将根据正在序列化和反序列化的类的版本动态生成 UID。如果 UID 不匹配,您将收到异常。

  2. 使用serialVersionUID 字段并且不要更新它。这有点危险。如果您进行不兼容更改,您将可能收到异常,因为序列化类中的表示描述符与反序列化程序的预期不匹配。但你可能不会,才是真正的问题。 (传输的数据可能有错误的含义!)

    如果您知道确定序列化和反序列化时类的版本将始终相同,这是安全的。但是您可以保证的场景/用例非常不寻常。

  3. 使用serialVersionUID 字段并仅在您进行了您评估为可能导致版本兼容性问题的类更改时重新生成它。风险在于您弄错了,并且在需要时不重新生成。这将导致与上述 2. 相同的问题。

  4. 使用serialVersionUID 字段并在更改类时重新生成它。

  5. 不要使用对象序列化。请改用 XML 或 JSON。 (使用模式......如果你想要一定程度的接口兼容性检查。)


但底线是,您实际上无法避免分布式系统中服务之间传递的表示的兼容性问题。

【讨论】:

  • 嘿,非常感谢,现在我知道了serialVersionUID是如何工作的,我的项目现在可以正常运行了:)
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多