我正在尝试将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来释放它们。但是,只有少数几个属性被映射:
种类,名称,分区,fullPath,生成,selfLink和描述。
所有其他均为空。有人可以帮我吗?
答案 0 :(得分:1)
似乎有不同级别的属性。
您已将对象的所有属性直接映射到根目录下,因此所有其他嵌套属性都不可见。
如果json类似于:
ComponentName cn = new ComponentName(context, CustomNotificationListenerService.class);
String flat = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");
return flat != null && flat.contains(cn.flattenToString());
您需要将其映射到类似于以下内容的对象:
{
"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",
...
}
]
}