【问题标题】:How to serialize JsonNode如何序列化 JsonNode
【发布时间】:2021-01-07 08:17:03
【问题描述】:

我将下面的实例保存到 Aerospike 数据库。 我要序列化的课程

public class School  implements Serializable {
    private static final long serialVersionUID = 1L;

    private JsonNode studentInfo;

    private JsonNode teacherInfo;

    private void writeObject(ObjectOutputStream out) throws IOException {
        ObjectMapper mapper = new ObjectMapper();

        mapper.writeValue((OutputStream) out, studentInfo);
        mapper.writeValue((OutputStream) out, teacherInfo);

    }

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        ObjectMapper mapper = new ObjectMapper();

        this.studentInfo = mapper.readValue((InputStream) in, JsonNode.class);
        this.teacherInfo = mapper.readValue((InputStream) in, JsonNode.class);
    }
}

使用上面的代码,保存到数据库工作正常(序列化)。

但是当我尝试从数据库(反序列化)获取数据时,我面临以下异常。

Caused by: com.aerospike.client.AerospikeException$Serialize: Error -10,1,30000,0,5,BB95B2FFB6EA79A 10.66.29.66 3030: ***com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input***
 at [Source: java.io.ObjectInputStream@6ff29830; line: 1, column: 0]
    at com.aerospike.client.command.Buffer.bytesToObject(Buffer.java:341)
    at com.aerospike.client.command.Buffer.bytesToParticle(Buffer.java:69)

如果我遗漏了什么,请告诉我。

【问题讨论】:

    标签: serialization deserialization aerospike


    【解决方案1】:

    我认为我们不能多次使用 ObjectOutputStream 和 ObjectInputStream。 我通过编写 writeObjectreadObject 函数解决了它。

    private void writeObject(ObjectOutputStream out) throws IOException {
            ObjectMapper mapper = new ObjectMapper();
           
            ArrayNode arrayNode = mapper.createArrayNode().add(this.studentInfo).add(this.teacherInfo);
    
            mapper.writeValue((OutputStream) out, arrayNode);
        }
        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
            ObjectMapper mapper = new ObjectMapper();
            ArrayNode arrayNode = null;
            arrayNode = mapper.readValue((InputStream) in, ArrayNode.class);
            this.studentInfo = arrayNode.studentInfo;
            this.teacherInfo = arrayNode.teacherInfo;
        }
    

    或者您可以创建一个具有 2 个字段的 POJO 作为 JsonNode 并序列化 POJO。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      相关资源
      最近更新 更多