java - 如何使用键值对对 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]
解决方案
我找到了解决方案。模型很好,导致问题的是 getObjectFromJson 方法,即使是非空对象(正如评论者指出的那样)
我报废了它,并在线进行了映射,它按预期工作:
Gson gson = new Gson();
model = gson.fromJson(reply, ModelTest.class);
推荐阅读
- c++ - 如何在使用 cin 请求 int 时有效地防止用户输入?
- angular - 在 Angular6 服务未加载
- java - 如何确保使用 BufferedWriter 及时输出到文件?
- sql - SQL Server 中所有联合的 Row_number 函数
- kubernetes - 如何判断哪些 pod 属于特定的优先级?
- libjpeg - 用8位灰度源图的libjpeg,可以吗?
- android - 更新个人资料图片时更改图片网址
- typescript - 如何联合两个 Observable。接收 6.2.2
- mysql - Angular 或 Node.js 在节点重新启动时将重复项插入 Mysql
- ruby - savon gem 和特殊字符的问题