如何在客户端将byte[]反序列化为Java POJO(或Object),即客户端如何获取类信息?

use*_*441 4 java arrays serialization deserialization spring-boot

我有两个相关问题:

  1. 我可以通过网络发送此类的 byte[]:
class Employee implements Serializable{
    byte[] avroBytes, //avro data in byte[] array
    String name
}
Run Code Online (Sandbox Code Playgroud)

在我的测试用例中,使用 MockMvc,我能够对其进行反序列化,然后将其转换为 Employee 对象,因为我的测试用例可以使用代码中的相同 POJO。然而客户端不会有这个 POJO 或类信息。收到字节后,它如何重建这个 POJO(或其他语言中的等效项)或对象?我需要在标头中发送一些类信息吗?客户端可能使用 Python 或其他某种语言,因此我需要一种使此类信息通用的方法。

在我的测试用例中,这是有效的:

 Employee res = (Employee ) SerializationUtils.deserialize(result.getResponse().getContentAsByteArray());
Run Code Online (Sandbox Code Playgroud)

如果客户端没有此 POJO/信息,他们将如何将反序列化字节转换为 Employee?我可以在我的测试用例中执行此操作,因为我的代码中有 Employee 类。

评论的附加信息:

我使用 org.springframework.util.SerializationUtils serialize() 方法对其进行序列化

Eug*_*ene 5

杰克逊可以解决你的问题。它能够将对象转换为字节数组,然后从字节数组转换为具有类似结构的另一个对象。
转换将按以下方式执行:

Object1 -> JSON -> byte[]
Run Code Online (Sandbox Code Playgroud)
byte[] -> JSON -> Object2
Run Code Online (Sandbox Code Playgroud)

例子:

Object1 -> JSON -> byte[]
Run Code Online (Sandbox Code Playgroud)

Jackson 提供了指定精确转换类型的能力。它是通过中间 JSON 实现的。