当前位置: 首页 > 知识库问答 >
问题:

如何在Jackson中触发对实现JsonSerializable的类的.SerializeWithType()的调用?

巫马正卿
2023-03-14

我只是不明白这是什么意思...

我如何设置测试环境以便调用此方法?注意,要序列化的JSON可以是除object以外的任何类型(即,boolean、number、string、array都是有效类型)。

共有1个答案

桑睿识
2023-03-14

当您想要使用多态性时,可以使用此方法

public class A {
    ...
}

public class B extends A {
    ...
}

public class C extends A {
    ...
}

如果序列化C的实例,然后尝试反序列化得到的json,但只知道它是a:

final ObjectMapper objectMapper = new ObjectMapper();
final String json = objectMapper.writeValueAsString(new C());
final A deserialized = objectMapper.readValue(json, A.class);

您需要在生成的JSON中存储一些内容,以保持序列化对象的真实类型。

import com.fasterxml.jackson.databind.JsonSerializable;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

public class SerializeWithTypeTest {

    private JsonSerializable serializable = mock(JsonSerializable.class);

    @Test
    public void shouldCallSerializeWithType() throws Exception {
        final ObjectMapper objectMapper = new ObjectMapper().enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        objectMapper.writeValueAsString(serializable);

        // make sure serializeWithType is called once
        verify(serializable, times(1)).serializeWithType(any(), any(), any());

    }

}
 类似资料:
  • 问题内容: 我想在hibernate中实现类似于触发器的功能。 我需要的是当表中的列达到特定值时,应在另一张表中插入一行,或者应更新某些其他表。 如何在hibernate状态下实现呢? 问题答案: 这在第14章中进行了描述。 例如,您可以拦截更新后事件。 但是,将事件系统用于 业务 运营可能不是最好的主意(它们最适合用于基础结构问题)。您应该为此使用更高级别的层。

  • 问题内容: 我有下面的触发器(mytrg),它调用一个过程(myproc),如果在table1中有任何插入,它将更新table2。在表2中更新数据后,我在过程中有“ COMMIT”语句。但是当在table1中有一个插入时,我得到以下错误。 需要知道如何提交更新。 谢谢 问题答案: 触发器内不能有COMMIT。提交对table1的INSERT后,将立即提交您的UPDATE。 但是要实现您想要的目标,

  • 我有一个azure函数,由上传到特定容器的任何新blob(图像)触发。这些图像然后被存储在这个blob存储容器中。现在我改变了我的函数并重新部署它,我希望我的azure函数能够在所有这些(已经存储的)图像上重新运行。由于该功能是blob触发的,现在我只是手动重新上传存储容器中的相同图像,但随着图像数据的增加,这样做变得越来越不可行。 函数中的Blob触发器如下所示: 它的解决方案是什么? 谢谢你。

  • 我在打字稿中定义了以下接口: 这个接口只是引入了一个不接受参数并返回字符串的调用签名。如何在类中实现这种类型?我尝试了以下操作: 编译器一直告诉我 类“MyType”声明了接口“MyInterface”,但没有实现它:类型“MyInterface”需要调用签名,但类型“MyType”缺少调用签名 如何实现调用签名?

  • 本文向大家介绍SqlServer实现类似Oracle的before触发器示例,包括了SqlServer实现类似Oracle的before触发器示例的使用技巧和注意事项,需要的朋友参考一下 1. 插入数据前判断数据是否存在 2. 删除表中数据时需要先删除外键表的数据

  • 问题内容: 我在编写的程序中遇到接口问题。我想创建一个接口,该接口的方法之一可以接收/返回对自己对象类型的引用。就像这样: 我不能在“?”处使用“ I”,因为我不想返回对接口的引用,而是要返回对类的引用。我搜索后发现在Java中没有“自我引用”的方法,因此我不能仅用“?”代替。在示例中,“ self”关键字或类似的内容。实际上,我想出了一个解决方案 但这似乎确实是一种解决方法或类似方法。还有另一种