在Java中的自定义异常中序列化字段
Posted
技术标签:
【中文标题】在Java中的自定义异常中序列化字段【英文标题】:Serialize fields in custom exception in Java 【发布时间】:2018-07-03 08:56:07 【问题描述】:假设我有我的自定义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
可序列化,我以后可以利用哪些优势?
【问题讨论】:
你在实现序列化接口方面没有任何缺点,但唯一的问题是瞬态,因为当从请求方法返回响应时,实体类将被序列化。 ***.com/questions/7683739/… 【参考方案1】:我应该如何处理这种情况?
因此,如果您不使用任何 RMI 并且您的应用程序在受保护的环境中运行(并且您想让 Sonar 满意)- 将自定义异常类中的所有字段标记为瞬态,或保持原样。
如果我们谈论的是分布式环境,那么序列化应该非常小心——你的类一旦被序列化就必须具有可预测的行为。在这种情况下,将实例字段设置为对象 Serializable
的逻辑状态的一部分,否则 - 将它们标记为瞬态。
附:为什么声纳warns你。
【讨论】:
以上是关于在Java中的自定义异常中序列化字段的主要内容,如果未能解决你的问题,请参考以下文章
为 Java 中的自定义检查异常编写 JUnit 测试用例?