Джексон пропускает ценности - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь сопоставить 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 и описание.

Все остальные имеют нулевое значение.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 23 января 2019

Кажется, что есть свойства на разных уровнях.

Вы сопоставили объект со всеми свойствами непосредственно под корнем, поэтому все остальные вложенные свойства не отображаются.

Если 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",
        ...
      }
   ]
}

Вам необходимо сопоставить его с объектом, похожим на:

public class VirtualServer {
   private String kind;
   private String selfLink;
   private List<VirtualServer.Item> items;
   ...

   public static class Item {
       private String kind;
       private String name;
       private String partition;
       private String fullPath;

       ...
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...