java - Jackson ObjectMapper 仅已知接口(interface)

标签 java spring jackson objectmapper

如果我想将一些 JSON 读入一个对象,并且我有接口(interface),但必须使用 Spring 上下文来获取实现类,我需要使用 SimpleAbstractTypeResolver 将接口(interface)映射到实现。到目前为止,如果我提前知道哪些接口(interface)需要哪些实现,那就太好了。但是,如果该接口(interface)具有返回其他接口(interface)的方法(并且可能递归地向下行),并且我不一定提前知道,我想我可以使用反射来弄清楚。所以这就是我想出的,但编译器不喜欢行 resolver.addMapping(method.getReturnType(), method.getReturnType()); ,表示它不适用于这些参数。我很确定这些类型适合该方法——对于如何实现这一点有什么想法吗?

        for (Method method : clazz.getMethods()) {
        if (method.getReturnType().isInterface() && method.getName().startsWith("get")) {
            // getter method returns an interface so find its implementation class
            Class beanClass = context.getBean(method.getReturnType()).getClass();
            if (clazz.isAssignableFrom(beanClass)) {
                resolver.addMapping(method.getReturnType(), method.getReturnType());
                mapInterfaces(objectMapper, clazz, resolver);
            }
        }
    }

最佳答案

您可能需要检查您的类型。

我的猜测如下:

resolver.addMapping(method.getReturnType(), beanClass);

(将第二个参数method.getReturnType()替换为beanClass)

或者作为替代方案(代码对我来说并不完全清楚,抱歉)

resolver.addMapping(clazz, beanClass);

您应该将接口(interface)和实现放入 addMapping() 中。

示例:

interface ITest{};

class TestImpl implements ITest {}

usage:
resolver.addMapping(ITest.class, TestImpl.class);

关于java - Jackson ObjectMapper 仅已知接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57674037/

相关文章:

java - 将字符串设置为日历类型

java - swing JTree、JTable 或 JList 中的 Activity 元素

Spring MVC 中的 Java Map 问题

java - 使用 LombokRequiredArgsConstructor 作为 JsonCreator

java - Jackson Mapper 后期制作

java - 如何在Java中使用Streaming API解析JSON日志文件,然后输出列表日志文件

java - 非美国键盘上 Eclipse 中的特殊字符

java - 使用 XPath 从 XML 中获取 Java 中的属性值

mysql - 无法将mysql连接到spring boot项目

java - 在 JBOSS EAP 6.2 中添加 Spring 模块