【发布时间】:2019-06-16 23:50:43
【问题描述】:
我正在尝试将 JSON 映射到简单的 Java DTO。
这是我的 Java 结构:
public class VirtualServerResponse {
private String kind;
private String selfLink;
private List<VirtualServer> items = new ArrayList<VirtualServer>();
//no arg constructor
//getters and setters
@JsonIgnoreProperties(ignoreUnknown = true)
public class VirtualServer {
public String kind;
public String name;
public String partition;
public String fullPath;
public String generation;
public String selfLink;
public String addressStatus;
public String autoLasthop;
public String cmpEnabled;
public String connectionLimit;
public String description;
public String destination;
public String enabled;
public String gtmScore;
public String ipProtocol;
public String mask;
public String mirror;
public String mobileAppTunnel;
public String nat64;
public String pool;
public String rateLimit;
public String rateLimitDstMask;
public String rateLimitMode;
public String rateLimitSrcMask;
public String serviceDownImmediateAction;
public String source;
public String sourcePort;
public String synCookieStatus;
public String translateAddress;
public String translatePort;
public String vlansEnabled;
public String vsIndex;
public PoolDTO assignedPool;
public VirtualServer() {
}
//getters and setters
这是应该映射的 JSON:
"kind":"tm:ltm:virtual:virtualcollectionstate",
"selfLink":"https://localhost/mgmt/tm/ltm/virtual?expandSubcollections=true&ver=13.1.1.2",
"items":[
{
"kind":"tm:ltm:virtual:virtualstate",
"name":"some_name_with:80",
"partition":"part",
"fullPath":"/part/name",
"generation":58670,
"selfLink":"https://localhost/mgmt/tm/ltm/virtual/~somelink",
"addressStatus":"yes",
"autoLasthop":"default",
"cmpEnabled":"yes",
"connectionLimit":0,
"description":"description",
"destination":"/part/1.1.1.1:80",
"enabled":true,
"gtmScore":0,
"ipProtocol":"tcp",
"mask":"255.255.255.255",
"mirror":"disabled",
"mobileAppTunnel":"disabled",
"nat64":"disabled",
"pool":"/pool",
"poolReference":{
"link":"https://localhost/mgmt/tm/ltm/pool/link"
},
"rateLimit":"disabled",
"rateLimitDstMask":0,
"rateLimitMode":"object",
"rateLimitSrcMask":0,
"serviceDownImmediateAction":"none",
"source":"0.0.0.0/0",
"sourceAddressTranslation":{
"type":"automap"
},
"sourcePort":"preserve",
"synCookieStatus":"not-activated",
"translateAddress":"enabled",
"translatePort":"enabled",
"vlansEnabled":true,
"vsIndex":137,
"vlans":[
"/LAN"
],
"vlansReference":[
{
"link":"https://localhost/mgmt/tm/net/vlan/~LAN?ver=13.1.1.2"
}
],
"policiesReference":{
"link":"https://localhost/mgmt/tm/ltm/virtual/policie",
"isSubcollection":true
},
"profilesReference":{
"link":"https://localhost/mgmt/tm/ltm/virtual/~name",
"isSubcollection":true,
"items":[
{
"kind":"tm:ltm:virtual:profiles:profilesstate",
"name":"stats",
"partition":"part",
"fullPath":"/part/stats",
"generation":3,
"selfLink":"https://localhost/mgmt/tm/ltm/virtual/~name",
"context":"all",
"nameReference":{
"link":"https://localhost/mgmt/tm/ltm/profile/statistics/~part~stats?ver=13.1.1.2"
}
},
{
"kind":"tm:ltm:virtual:profiles:profilesstate",
"name":"tcp",
"partition":"part",
"fullPath":"/part/tcp",
"generation":58670,
"selfLink":"https://localhost/mgmt/tm/ltm/virtual/~name",
"context":"all",
"nameReference":{
"link":"https://localhost/mgmt/tm/ltm/profile/tcp/~part~tcp?ver=13.1.1.2"
}
}
]
}
}, ... next item
JSON 由整个 JSON 在一行中映射:
while ((line = br.readLine()) != null) {
this.jsonResponse = m.readValue(line, VirtualServerResponse.class);
}
我不需要item 中的所有子项,所以我使用 JsonIgnoreUnknown 让它们离开。但是,只有少数属性被映射:
kind、name、partition、fullPath、generation、selfLink 和 description。
所有其他都是空的。有人可以帮我吗?
【问题讨论】:
-
抱歉,但我对你的问题有点困惑。这是你想要的? stackoverflow.com/questions/20578846/…
-
我想将所有 json 属性映射到它们的 java 变量,但正如我所说,这只适用于少数