假设我有自定义的RuntimeException,其中MyEntity是JPA @Entity:
@Getter
public class MyEntityAlreadyExistingException extends RuntimeException {
private final MyEntity myEntity;
public MyEntityAlreadyExistingException(MyEntity myEntity) {
super(MessageFormat.format("MyEntity with name \"{0}\" already exists", myEntity.getName()));
this.myEntity = myEntity;
}
}
Sonar暗示我要使myEntity瞬态或可序列化.
我该如何应对这种情况?
我没有使用任何RMI,远程遥控.使用JPA的Spring Boot Web应用程序相对简单.
如果我将myEntity序列化,我可以在以后利用哪些优势?
解决方法:
我该如何应对这种情况?
因此,如果您不使用任何RMI并且您的应用程序在受保护的环境中运行(并且您希望Sonar满意) – 将自定义异常类中的所有字段标记为瞬态,或保持原样.
如果我们讨论的是分布式环境,那么应该非常小心地进行序列化 – 一旦序列化,您的类必须具有可预测的行为.在这种情况下,将实例字段作为对象Serializable的逻辑状态的一部分,否则 – 将它们标记为瞬态.
附:为什么Sonar warns你.