首页 > 解决方案 > 如何使用键值对对 JSON 建模?

问题描述

这个简单的 JSON 由https://httpbin.org/get返回,便于测试。

{
  "args": {},
  "headers": {
    "Content-Length": "0",
    "Host": "httpbin.org",
    "User-Agent": "AemSConnector v1.0",
    "X-Amzn-Trace-Id": "Root=1-606c333f-338353e14fc31e375617f4ba"
  },
  "origin": "81.40.159.142",
  "url": "https://httpbin.org/get"
}

我试图弄清楚如何构建一个 Java 类来对此进行建模。

我努力了:

public class ModelTest {
    public String origin;
    public String url;
    public HashMap<String, String> headers;
    public HashMap<String, String> args;

    // getters and setters and default constructor here...
  }
}

还有这个:

public class ModelTest {
    public String origin;
    public String url;

    // getters and setters and default constructor here...
  }
}

但是当我尝试将 JSON 字符串转换为此模型时,我只是在日志中得到一个空点异常,没有有用的信息。

我正在使用的代码是这样的:

// ModelTest model = null;
ModelTest model = new ModelTest();
model = (ModelTest) getObjectFromJson(reply, model);
}
:
public static Object getObjectFromJson(String jsonString, Object obj) {
    Gson gson = new Gson();
    Object returnValue = null;
    try {
        returnValue = gson.fromJson(jsonString, obj.getClass());
    } catch (Exception e) {
        log.error("Exception occured in Something :: getObjectFromJson --> ", e);
    }
    return returnValue;
}

例外:

2021-04-06 12:09:04.245 ERROR [com.adobe.aem.guides.wknd.core.util.MyConnector] Exception occured in Something :: getObjectFromJson -->
java.lang.NullPointerException: null
        at com.adobe.aem.guides.wknd.core.util.SpineConnector.getObjectFromJson(MyConnector.java:77) [aem-guides-wknd.core:0.2.1.SNAPSHOT]
        at com.adobe.aem.guides.wknd.core.util.SpineConnector.get(MyConnector.java:50) [aem-guides-wknd.core:0.2.1.SNAPSHOT]
        at com.adobe.aem.guides.wknd.core.servlets.SpineServlet.doGet(MyServlet.java:64) [aem-guides-wknd.core:0.2.1.SNAPSHOT]

标签: javajsongson

解决方案


我找到了解决方案。模型很好,导致问题的是 getObjectFromJson 方法,即使是非空对象(正如评论者指出的那样)

我报废了它,并在线进行了映射,它按预期工作:

    Gson gson = new Gson();
    model = gson.fromJson(reply, ModelTest.class);

推荐阅读