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

假设我有自定义的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你.

上一篇:php中的Throwables和ParseError


下一篇:java – JUnit TestWatcher:失败了,是否可以删除抛出的异常(操纵Throwable / stacktrace)?