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

如何在Java/Jackson中以编程方式配置ObjectMapper来实例化JavaBean?

东门新立
2023-03-14

我有许多Java bean接口,如下所示:

public interface Dog
{
String getName();
void setName( final String value );
}

我还自动生成bean实现如下:

public final class DogImpl implements Dog
{
public String getName()
{
    return m_name;
}

public void setName( final String value )
{
    m_value = value;
}

private volatile String m_value;
}

ObjectMapper完美工作,除了当我开始像这样嵌套这些bean时:

public interface Dog
{
String getName();
void setName( final String value );

Dog getParent();
void setParent( final Dog value );
}

我得到这个错误:

抽象类型需要映射到具体类型、具有自定义反序列化器或包含其他类型信息

它在抱怨,因为bean定义是一个接口,而不是具体类型。我的问题是,是否有一种方法可以让我通过模块或其他东西为ObjectMapper定义接口类型到具体类型的映射?

具体来说,我可以得到一张地图

共有1个答案

陆斌
2023-03-14

这可以使用SimpleAstractTypeResolver完成

此链接向您展示如何将映射添加到解析器:Jackson-如何为接口引用的反序列化指定单个实现?


以下是将解析器添加到ObjectMapper的方式:

        final SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
        for ( final Class< ? > api : apis )
        {
            resolver.addMapping( api, getConcreteImpl( api ) );
        }

        final SimpleModule module = new SimpleModule();
        module.setAbstractTypes( resolver );
        mapper.registerModule( module );
 类似资料:
  • 问题内容: 我将类名称存储在属性文件中。我知道类存储将实现IDynamicLoad。如何动态实例化该类? 现在我有 newInstance是否仅加载编译的.class文件?如何加载未编译的Java类? 问题答案: 如何加载未编译的Java类? 你需要先编译它。可以使用以编程方式完成此操作。这仅需要在JRE顶部的本地计算机上安装JDK。 这是一个基本的启动示例(不包括明显的异常处理): 哪个像 如果

  • 我正在尝试使用Jackson在骆驼路由上序列化POJO和反序列化POJO到JSON和从JSON到JSON。其中一些有Java8 LocalDate字段,我希望它们序列化为YYYY-MM-DD字符串,而不是整数数组。 我们只对Spring Boot应用程序使用Java配置,因此没有XML骆驼配置。 我已经成功地创建了一个ObjectMapper来执行我想要的操作,通过将此添加到我们的依赖项中,我们系

  • 我需要实现一个Android应用程序,允许用户配置VPN连接,而无需访问Android设备的本机菜单。我有两个问题: > 在Android 4.0(api级别14及以上)中,我发现有一个名为VpnService的新组件,它提供了一个钩子来创建虚拟网络接口,配置它,并从它拦截/转发包到VPN服务器,但是有没有像PPTP或IPSec这样的内置vpn协议,只有实现它们的可能性。我的问题是PPTP和IPS

  • 我正在尝试使用设置log4j2以写入日志。我希望以编程方式配置日志记录系统,而不是使用XML文件。 以下是我尝试过的内容(大部分与网站上的文档相同)https://logging.apache.org/log4j/2.x/manual/customconfig.html#Configurator): 我在main方法的开头调用方法。当我运行我的程序时,会创建一个名为的文件,但是所有日志输出都会转到

  • 问题内容: 使用Spring Boot我可以用以下方法实例化一个: 码: 特性: 这将创建一个数据源类: 如何以编程方式设置DataSource用户名/密码? 我们有一项政策,不要以纯文本形式存储凭据,我必须在工作的地方使用特定的凭据提供程序。 问题答案: 您可以使用,如果你使用的是首发。另外,为了覆盖默认的自动配置Bean,您需要将Bean标记为 就我而言,我具有以prefix 开头的属性。 例

  • 代码: 属性: 这将创建一个类为的数据源