在Java中自定义异常中的字段序列化

时间:2018-01-24 10:35:56

标签: java serialization runtimeexception transient throwable

我们说我有自定义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可序列化,我可以在以后利用哪些优势?

1 个答案:

答案 0 :(得分:1)

我该如何应对这种情况?

因此,如果您不使用任何RMI并且您的应用程序在受保护的环境中运行(并且您希望Sonar满意) - 将自定义异常类中的所有字段标记为瞬态,或保持原样。

如果我们讨论分布式环境,那么应该非常谨慎地进行序列化 - 一旦序列化,您的类必须具有可预测的行为。在这种情况下,将实例字段作为对象Serializable的逻辑状态的一部分,否则 - 将它们标记为瞬态。

P.S。为什么声纳warns你。