这可能是java的可序列化问题。时间API
使用LocalDataTime
和LocalDate
,它们是实现Serializable
接口的类中的Serializable
类。SonarQube报告说,虽然代码已经实现了Serializable
接口,但代码应该更新为“使sampleDateObject
”瞬态或可序列化。有什么解决问题的建议吗
public class SampleData implements Serializable {
...
private LocalDateTime sampleDateObject;
public LocalDateTime getSampleDateObject() {
return sampleDateObject;
}
public void setSampleDateObject(LocalDateTime sampleDateObject) {
this.sampleDateObject= sampleDateObject;
}
.....
}
以下是来自Java1.8API的代码片段
public final class LocalDateTime
implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
....
}
下面是SonarQube在未能将java元素标识为可序列化时的描述,我看到的错误是“使”sampleDateObject“暂时或可序列化”
Serializable
类中的字段本身必须是Serializable
或瞬态的,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架都会将对象刷新到磁盘上,而所谓的Serializable
对象中包含非瞬态、非序列化的数据成员,可能会导致程序崩溃,并为攻击者打开大门
不遵从代码示例
public class Address {
//...
}
public class Person implements Serializable {
private static final long serialVersionUID = 1905122041950251207L;
private String name;
private Address address; // Noncompliant; Address isn't serializable
}
顺从的例子
public class Address implements Serializable {
private static final long serialVersionUID = 2405172041950251807L;
}
public class Person implements Serializable {
private static final long serialVersionUID = 1905122041950251207L;
private String name;
private Address address;
}
共 (0) 个答案