当前位置: 首页 > 面试题库 >

Jackson-如何为接口引用的反序列化指定单个实现?

叶举
2023-03-14
问题内容

我想用杰克逊反序列化JSON对象。因为目标是接口,所以我需要指定应使用哪种实现。

该信息可以使用@ JsonTypeInfo-Annotation存储在JSON对象中。但是我想在源代码中指定实现,因为它总是一样的。

这可能吗?


问题答案:

使用一个SimpleAbstractTypeResolver:

ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion());

SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
resolver.addMapping(Interface.class, Implementation.class);

module.setAbstractTypes(resolver);

mapper.registerModule(module);


 类似资料:
  • 我想用Jackson反序列化一个JSON对象。因为目标是一个接口,所以我需要指定应该使用哪个实现。 这些信息可以使用@jsonTypeInfo-Annotation存储在JSON-Object中。但我想在源代码中指定实现,因为它总是相同的。

  • 像这样: 我该怎么办?

  • 但这只有在保证先设置start的情况下才起作用。

  • 问题内容: 的功能需要Class。但是,如果我内部传递的类将某些接口作为数据成员,该如何使用它。 尽管我可以理解此异常的原因,因为杰克逊没有获得所传递类的内部接口的具体类,但我的问题是如何解决它?那我该如何反序列化呢?我要反序列化的类是: 这是一个接口,所以这给了我以下错误:- 问题答案: 杰克逊显然不能构造对象,因为它是一个接口。您将需要在json和ObjectMapper中具有其他信息,以告诉

  • 我有下面的课: 我希望它从Jackson处理的以下JSON中反序列化。 jackson-datatype-joda(https://github.com/fasterxml/jackson-datatype-joda) 自定义序列化程序(公共类JodaDateTimeJsonSerializer扩展JsonSerializer{...}-Spring@ResponseBody Jackson Js

  • 我正在编写一个使用Jackson序列化/反序列化对象的类。在编译时,我不知道要序列化/反序列化的对象是哪种类型。 我的类看起来像(移除了一些不相关的代码): 这是我用来测试的代码片段: 据我所知,使用应该足以让反序列化器知道从字节流读取的值应该放在对象中。但是,方法返回的对象仍然是,我理解它是反序列化的默认类。 我还尝试更改方法以返回,但我遇到了同样的问题。 我很确定这是关于我将类型传递到序列化器