java - ObjectMapper - 读/写通用对象

标签 java fasterxml

我有一个场景,我将对象推送到队列,该队列将在另一端读取。

我正在将对象转换为字符串,将字符串转换为字节。将这些字节插入队列。

        CollectionObject collectionObject = new CollectionObject();
        // This can be any Object. Or at least Iam thinking it's Object class.
        collectionObject.setName("Sienna");

        String customerMessage = objectMapper.writeValueAsString(collectionObject);
        byte[] msg = customerMessage.getBytes(StandardCharsets.UTF_8);

另一方面,我正在以这种方式读取这个对象。

        String messageFromQueue = new String(msg);
        objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
        Object genericObject = objectMapper.readValue(messageFromQueue, new TypeReference<Object>(){});

        System.out.println("let's see object"+genericObject);
        if(genericObject instanceof CollectionObject)
            System.out.println("turned out to be collectionObject "+genericObject);

但是 check 的实例永远不会被满足。 readValue 返回 LinkedHashMap 对象。

任何帮助, 谢谢

最佳答案

问题

没有任何内容指示要编码到的类:{"name":"Sienna"}。 fastxml 怎么可能猜测它应该编码到哪种类型。

一种解决方案

首先启用默认输入:

    objectMapper.enableDefaultTyping();

然后考虑在实际负载周围使用包装对象:

public class Wrapper {

    private Object content;

    public Wrapper() {
    }

    public Wrapper(Object content) {
        this.content = content;
    }

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }
}

然后写入对象:

    String customerMessage = objectMapper.writeValueAsString(new Wrapper(collectionObject));

然后读取对象:

    Object genericObject = objectMapper.readValue(messageFromQueue, Wrapper.class).getContent();

在这种情况下,genericObject将是一个CollectionObject,并且json是{"content":["CollectionObject",{"name":"Sienna"}]}

关于java - ObjectMapper - 读/写通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53335717/

相关文章:

java - 如何使用 Jackson Annotation 进行映射

java - 如何使用 codehaus 包类从 POJO 生成 JSON 架构时添加描述属性

java - 如何重命名子类的 JSON 属性

java - 使用 JPA 从存储过程中获取 select 语句结果?

java - 所拍摄照片的亮度问题 (Xamarin.Android)

java - 无法使用 java SoapMessage 更改信封中的 soap URI

java - springboot 升级后 @JsonProperty 不工作

java - 如何将图像转换为BufferedImage

java - 如何减少 MainActivity/外包 UI 代码的大小

java - 通过 FasterXML-Jackson 反序列化 Codehaus-Jackson 注释类实体?