【发布时间】:2021-03-20 17:29:58
【问题描述】:
我正在努力将复杂的嵌套 Json 数据反序列化为 Java 对象,我认为我的类结构是错误的。这是我的 Json 数据:
{
"resultsPerPage": 20,
"startIndex": 0,
"totalResults": 2,
"result": {
"dataType": "CPE",
"feedVersion": "1.0",
"cpeCount": 2,
"feedTimestamp": "2021-03-19T13:06",
"cpes": [
{
"deprecated": false,
"cpe23Uri": "cpe:2.3:o:microsoft:windows_10:1511:*:*:*:*:*:x64:*",
"lastModifiedDate": "2015-12-09T17:28Z",
"titles": [
{
"title": "Microsoft Windows 10 1511 64-bit",
"lang": "en_US"
}
],
"refs": [
{
"ref": "https://www.microsoft.com/en-us/",
"type": "Vendor"
}
],
"deprecatedBy": [],
"vulnerabilities": [
"CVE-2016-0174",
"CVE-2016-0171"
]
}
这是我将 Json 数据映射到的类:
public class RESPONSE {
Result result;
}
class Result {
List<Cpes> cpes;
}
class Cpes {
String cpe23Uri;
List<Titles> titles;
List<String> vulnerabilities;
}
class Titles{
String title;
}
当我在下面的代码中调试我的代码r 时为空,我认为这是因为我的 RESPONSE 类设置不正确。
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
RESPONSE r = mapper.readValue(response.getContent(), RESPONSE.class);
System.out.println(r);
【问题讨论】:
-
请遵守 Java 命名约定,否则会使您的代码难以阅读。类应该是
PascalCase。 -
我会编辑,这背后的原因是因为 RESPONSE 是 HTTP 响应,我很容易记住这一点。 cpes 是一个疏忽,我现在将更正。
-
并且没有抛出异常?
-
无异常,只是结果返回null。但是我知道 HTTP 请求正在工作,因为我已经通过打印它进行了检查。一切都在那里。
-
你能尝试在你的类中添加getter和setter吗?可能是因为他们,Jackson 无法映射。