gpt4 book ai didi

java - 如何在客户端将字节[]反序列化为Java POJO(或对象),即客户端如何获取类信息?

转载 作者:行者123 更新时间:2023-12-05 01:04:11 25 4
gpt4 key购买 nike

我有两个相关的问题:

  1. 我可以通过网络为这个类(class)发送 byte[]:
class Employee implements Serializable{
byte[] avroBytes, //avro data in byte[] array
String name
}

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

在我的测试用例中这是可行的:

 Employee res = (Employee ) SerializationUtils.deserialize(result.getResponse().getContentAsByteArray());

How will client cast the de-serialized bytes to Employee if they don't have thisPOJO/information? I could do it in my test case because my code has the Employee class in code.

评论的附加信息:

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

最佳答案

Jackson可以解决您的问题。它具有将对象转换为字节数组,然后从字节数组转换为具有类似结构的另一个对象的能力。
接下来会进行转换:

Object1 -> JSON -> byte[]
byte[] -> JSON -> Object2

例子:

public class TestClass {
@Test
public void methodTest() throws IOException {
Employee1 employee1 = new Employee1();
employee1.bytes = new byte[] {1, 2, 3};
employee1.name = "name";

ObjectMapper objectMapper = new ObjectMapper();
//convert Employee to byte array
byte[] serialized = objectMapper.writeValueAsBytes(employee1);

//convert from byte array to another object with a similar structure
Employee2 employee2 = objectMapper.reader().readValue(serialized, Employee2.class);

Assert.assertArrayEquals(employee1.bytes, employee2.bytes);
Assert.assertEquals(employee1.name, employee2.name);
}
}

public class Employee1 implements Serializable {
public byte[] bytes;
public String name;
}

public class Employee2 implements Serializable {
public byte[] bytes;
public String name;
}

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

关于java - 如何在客户端将字节[]反序列化为Java POJO(或对象),即客户端如何获取类信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72655714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com