为什么Sonar在可序列化时想要一个标记瞬态的LocalDateTime?

Ste*_*eve 8 java sonarqube

我有一个Eclipse的声纳插件,它给了我一个

Make this value-based field transient so it is not included in the serialization of this class

在LocalDateTime对象上.我没有得到的是,LocalDateTime绝对是可序列化的.这是班级

 public final class LocalDateTime
        implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?我只是不明白瞬态意味着什么?通常我不太注意,但我很奇怪能够在Get请求中序列化它,但不能在post请求中反序列化它,我想知道它是否与此相关.

Abd*_*ssi 2

根据Sonarsource 规则资源管理器

可序列化类中的字段本身必须是可序列化的或瞬态的,即使该类从未显式序列化或反序列化。例如,在负载下,大多数 J2EE 应用程序框架都会将对象刷新到磁盘,而具有非瞬态、不可序列化数据成员的所谓可序列化对象可能会导致程序崩溃,并为攻击者打开大门。一般来说,可序列化类应该履行其约定,并且在实例序列化时不会出现意外行为。

然而正如你所说,它LocalDateTime是可序列化的。这意味着有时 Sonar 规则不好(当将 Hibernate 与包含可序列化的 LocalDateTime 的对象一起使用时)。

一种解决方案是使用您自己的规则而不是 Sonar 默认规则。一种方法(这是一种解决方法,而不是解决方案)是用以下方式注释您的字段:@SuppressWarnings("squid:S3437")