java - Jersey 2.0 HashMap 与 Json 之间的转换

标签 java json rest jersey jax-rs

我有这样的 Json,它是由网络服务提供的:

{   ... 
    "metadata": {
        "name": "test_server",
        "server_type": "test",
         ...
    },
     ...
}

我正在使用 GLassshfish、Netbeans 和 Jersey 框架来使用 WS 中的 Web 资源。 根据Jersey的特点,我使用了一些映射Json结构的Java类,以便使用Jersey(和JAX-RS注释)获得数据结构的转换。对于提到的 Json 数据包,我创建了此类:

public class Server 
    {
      ...

      private Map<String, String> metadata = new HashMap<String, String>();
      ...
      public Server(){}
    }

除了“元数据”属性之外,映射工作一切正常,该属性的结构类似于随机长度的映射,并以字符串作为键和值。 转换后的结果是:

{
    "metadata": {
        "entry":[]
    }
}

我也有类似的情况,但没有解决。 Jersey 2.0似乎无法将 map stile Json属性转换为相应的Java数据结构对象(HashMap)。 服务器上没有任何异常或错误,但打印的json映射总是包含“entry”:[],而且我不知道它是从哪里出来的。 对于其他对象类型或数据类型,我没有问题(List、int、String...都工作正常)。 谁能帮我?感谢支持!

最佳答案

我已经测试了您提供的 JSON 字符串,它可以使用 TypeReference 工作。和ObjectMapper返回 Map<String, Map<String, String>>根据此 JSON 字符串。

这是代码:

String jsonString = "{\"metadata\": {\"name\": \"test_server\",\"server_type\": \"test\"}}";

TypeReference<Map<String, Map<String, String>>> typeRef = 
                        new TypeReference<Map<String, Map<String, String>>>() {};
ObjectMapper mapper = new ObjectMapper();
try {
    Map<String, Map<String, String>> jsonObject = 
                                       mapper.readValue(jsonString, typeRef);
    System.out.println(jsonObject.get("metadata"));
} catch (Exception e) {
    System.out.println("Three might be some issue wiht the JSON string");
}

输出:

{name=test_server, server_type=test}

关于java - Jersey 2.0 HashMap 与 Json 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25145216/

相关文章:

java - 在 Android 中删除旋转图像不显示删除正确路径

python - 我可以将 Odoo 浏览对象转换为 JSON

android - 如何为使用 MySQL 数据库的 Android 应用程序创建 REST 服务?

java - 什么是Java JDKV2

java - 编辑 doView() 上的响应内容

c# - 如何将 JSON 复制并粘贴到 Eclipse 中并创建 .java?

javascript - 无法获取json数据

python - Django REST Framework - 在 URL 中添加 2 个 PK

rest - 如何使用 Kafka REST 代理删除 Kafka 主题?

java - 获取游戏中对象的位置