JsonMappingException:找不到非具体 Map 类型的反序列化器

2023-12-15

    String str = commonClient.authorizedRequestBuilder(commonClient.webTarget
            .path("/apps/get_current_version/default/"+appName+"/"+appName)
            .queryParam("object_type", "app"))
            .accept(MediaType.APPLICATION_JSON_TYPE)
            .get()
            .readEntity(String.class);

i get

str = {"versions": {"ap": "Not Set", "am": "topic-test-publisher-1.0.16", "il": "topic-test-publisher-1.0.16", "row": "topic-test-publisher-1.0.49"}, "provider": "gce"}

然后我改成这段代码

    Version version = commonClient.authorizedRequestBuilder(commonClient.webTarget
            .path("/apps/get_current_version/default/"+appName+"/"+appName)
            .queryParam("object_type", "app"))
            .accept(MediaType.APPLICATION_JSON_TYPE)
            .get(ClientResponse.class)
            .readEntity(new GenericType<Version>(){});

并得到一个例外:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:269)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:428)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:428)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:461)
    at com.fasterxml.jackson.databind.ObjectReader._findRootDeserializer(ObjectReader.java:1749)
    at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1465)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:912)
    at com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:810)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:808)
    at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326)
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:803)
    ... 32 more
Caused by: java.lang.IllegalArgumentException: Can not find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.createMapDeserializer(BasicDeserializerFactory.java:1158)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:380)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
    ... 59 more

where:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Version {
    @JsonProperty("am")
    public String am;
    @JsonProperty("row")
    public String row;

    @Override
    public String toString() {
        return "VersionDto{" +
                "am='" + am + '\'' +
                ", row='" + row + '\'' +
                '}';
    }
}

我怎样才能以不同的方式反序列化它?

UPDATE

我努力了:

with

public class Version {

    public Map<String, String> versions;

    public String provider;

    // getters, setters, etc
}

and

    Version version = commonClient.authorizedRequestBuilder(commonClient.webTarget
            .path("/apps/get_current_version/gce/waze-prod/default/"+appName+"/"+appName)
            .queryParam("object_type", "app"))
            .accept(MediaType.APPLICATION_JSON_TYPE)
            .get(ClientResponse.class)
            .readEntity(Version.class);

但得到了同样的错误


我会说对象Version需要有一个名为versions类型的Map<String, String>还有一个名叫provider类型的String,你可能不需要GenericType thing.

public class Version {

    private Map<String, String> versions;

    private String provider;

    // getters, setters, etc
}

then

Version version = commonClient.authorizedRequestBuilder(commonClient.webTarget)
            // ...
            .readEntity(Version.class);
version.getVersions().get("am"); // to get "am"

测试用

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Map;

public class Test {
    public static void main(String[] args) throws IOException {
        String str = "{\"versions\": {\"ap\": \"Not Set\", \"am\": \"topic-test-publisher-1.0.16\", \"il\": \"topic-test-publisher-1.0.16\", \"row\": \"topic-test-publisher-1.0.49\"}, \"provider\": \"gce\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        Version v = objectMapper.readValue(str, Version.class);

        System.out.println(v.versions.get("am"));
    }

    public static class Version {
        public Map<String, String> versions;

        public String provider;
    }
}

输出:“主题测试发布者-1.0.16”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JsonMappingException:找不到非具体 Map 类型的反序列化器 的相关文章

随机推荐

  • Firefox XPCOM 组件 - 调用方法 UnnamedClass 的权限被拒绝

    Firefox XPCOM 组件可以跨多个页面读写页面内容吗 设想 一堆本地 HTML 和 javascript 文件 Main html 文件打开一个窗口 pluginWindow 并使用以下命令创建一个插件 netscape secur
  • 使用RVM安装Ruby 1.9.2时出现Curl证书错误

    尝试下载 Ruby 1 9 2 时 RVM 遇到证书错误 看起来像curl存在证书问题 但我不知道如何绕过它 我在下面包含了确切的错误信息 rvm install 1 9 2 Installing Ruby from source to U
  • 使用指令内在函数在 Hexagon DSP 中启用 HVX SIMD

    我使用 Hexagon SDK 3 0 编译 HVX DSP 架构的示例应用程序 有许多与 Hexagon LLVM 相关的工具可供使用 位于以下文件夹 Qualcomm HEXAGON Tools 7 2 12 Tools bin 我编写
  • 如何打印画布元素?

    我的页面上有一个画布元素 我在其上绘制图像以及用户输入的一些数据 按一下按钮 我想将画布发送到打印机 将其打印在纸上 我尝试使用这个插件 jQuery printElement 像那样 按钮代码 a href PRINT a print v
  • iOS 应用程序相机访问被拒绝 iOS 9.1(黑屏)

    我想在我的应用程序中访问相机 我正在尝试以下代码 if UIImagePickerController isSourceTypeAvailable UIImagePickerControllerSourceTypeCamera UIImag
  • 在 eclipse luna 中启用 javascript 验证

    前段时间我问过这个问题 为 eclipse 启用 javascript 验证 我希望 Eclipse 突出显示 javascript 错误 警告 您在答案中看到的问题是该项目未配置为 Javascript Nature 现在我迁移到 Ecl
  • 何时使用内容提供商

    我了解内容提供商的目的是允许在应用程序之间公开共享数据 但是 我想知道是否有人有关于制作一个内容提供程序以仅在您自己的应用程序中使用的想法 这样做有什么好处吗 有什么缺点吗 过去 我刚刚实现了 SQliteOpenHelper 来访问数据库
  • 我可以使用 VBA 将网络图像 (gif) 导入到 Excel 中吗?

    我在 Excel 工作表中有一个 gif 文件的 URL 列表 我想使用 VBA 查询这些网站并将这些图像插入到同一个工作表中 我使用的是 Excel 2007 我尝试使用 获取外部数据 从网络 功能来查询网站 但返回以下错误 打不开htt
  • 为什么绝对定位的元素由其同级元素放置,而不是放置在页面的顶角?

    我不明白为什么我的绝对定位元素出现在我的之后child static分区我一直认为绝对定位的元素会从流程中取出 那么为什么不呢child absolute覆盖child static div parent position relative
  • 使用utf8编码的Perl脚本,它可以打开GB2312编码的文件名吗?

    我不是在谈论以 utf 8 或非 utf 8 编码读取文件内容之类的内容 这是关于文件名的 通常我将 Perl 脚本保存为系统默认编码 在我的情况下为 GB2312 并且不会遇到任何文件打开问题 但出于处理目的 我现在有一些以 utf 8
  • 检查异常是编译时还是运行时? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我读到有关检查异常的内容 它由编译器检查 但仅在运行时检查 这是对的吗 如果正确的话又如何呢 检查异常在编译时进行检查 以确保您正在处理它们 方法是捕获它们或声明包含方法throws例
  • HTMLUnit 不等待 Javascript

    我有一个基于 GWT 的页面 我想使用 HtmlUnit 为其创建 HTML 快照 该页面使用产品上的 Ajax JavaScript 信息进行加载 因此大约 1 秒后会出现 正在加载 消息 然后显示内容 问题是 HtmlUnit 似乎没有
  • TopAppBar 与导航集成的支架

    如何在中显示导航图标 后退箭头或菜单 TopAppBar using Scaffold基于 NavController 中的实际位置 我在用使用 Compose 1 0 0 alpha02 进行导航 下面是一个示例代码 描述了它应该如何工作
  • 为什么C++不允许继承友谊?

    为什么友谊在 C 中至少不能选择性地继承 我知道出于明显的原因而禁止传递性和反身性 我这么说只是为了阻止简单的常见问题解答引用答案 但缺乏类似的东西virtual friend class Foo 让我困惑 有谁知道这个决定背后的历史背景吗
  • 如何使用文件系统访问 API 获取视频的 src?

    使用新的文件系统访问 API 选择文件夹时 我想列出带有 HTML 标签的视频 但我无法从文件句柄中获取源代码 可以从输入读取视频 const blobUrl URL createObjectURL droppedFiles 0 this
  • .NET 中的 XML 数据管理

    我学习 NET 中的 Xml 数据处理 我有以下 XML 格式
  • GraphQL 和 Rest api 有什么区别

    我想知道这一切的原因是什么qraphQL用来代替rest api 据我所知 可以使用以下命令在一个请求中发出一组 HTTP 请求 而不是发出多个请求 以减少 HTTP 请求 graphQL 有人可以再描述一下吗 提前致谢 互联网上有许多文章
  • 无法加载DLL“sqlite3”:找不到指定的模块

    我很难让我的测试针对我的 SQLite 数据提供程序运行 我查看了建议的链接在 stackoverflow 上 但他们似乎都没有让我走上正确的道路 我已经下载了Windowssqlite3 dll 的预编译二进制文件 I ve copied
  • ADAL:W8.1 应用程序尝试注销用户

    我有一个概念验证 W8 1 app 它允许使用 ADAL 库通过 Azure Active Directory 对用户进行身份验证 我已经完成了允许用户登录并访问我的资源的部分 但是 它应该能够允许用户注销 并允许其他用户在同一设备上登录
  • JsonMappingException:找不到非具体 Map 类型的反序列化器

    String str commonClient authorizedRequestBuilder commonClient webTarget path apps get current version default appName ap