所以这是一个非常奇怪的情况,我遇到过并且不知道如何处理。
我有一个服务,其中包含根据发送给它的请求反序列化对象的逻辑。现在正在更改有问题的对象,并实现了一种新的反序列化方法来处理该问题(不要问为什么,我所知道的是我们只需要更改反序列化方法)。
问题是这个改变需要向后兼容,所以我们应该能够处理这两种类型的对象。为了做到这一点,我们需要能够根据对象的类型确定要使用的正确反序列化器,但是如果对象被序列化到字节缓冲区中,我们该怎么做呢?我没有主意了...是否有不同/更好的方法来进行此更改?
该服务采用 Java 语言。
编辑 1:明确我的意图 .
旧对象使用自定义序列化器,新对象使用 ObjectMapper JSON 序列化器。所以我的目标是能够检测我是否正在处理旧对象或新对象,以便我可以相应地反序列化。
我可以尝试使用新的反序列化器并捕获它抛出的 JsonParseException,并在 catch block 中使用旧的序列化器,但这不是我想要处理 JsonParseException 的方式。
最佳答案
可序列化类应该有一个静态、最终且长整型的serialVersionUID。 这是为了确保被序列化的对象的类与被反序列化的对象的类相同。
为了实现向后兼容性,请按照以下步骤操作:
- 确保每当类结构发生更改时,您都会更改该字段的值。
- 使用新的自定义序列化程序来反序列化对象。
- 如果该对象属于前一个类,您将收到 InvalidClassException。捕获此异常并尝试使用 catch block 内的旧反序列化器反序列化该对象。
这可确保您的自定义解串器具有向后兼容性。
关于Java 处理两个自定义反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891655/