【问题标题】:Jackson missing out values杰克逊错过了价值观
【发布时间】: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 变量,但正如我所说,这只适用于少数

标签: java json jackson


【解决方案1】:

好像有不同级别的属性。

您已将具有所有属性的对象直接映射到根目录下,因此所有其他嵌套属性均不可见。

如果 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;

       ...
   }
}

【讨论】:

  • 感谢提示,但为什么有些值设置正确?我会试试这个。遍历列表时如何从外部访问静态类?
  • @ItFreak 您可以迭代保存在属性项中的列表。如下for (VirtualServer.Item item : myVirtualServer.getItems()) { ... }
  • 谢谢 我试试这个
  • @ItFreak 在 VirtualServer 级别和 Item 级别都有一些属性。我想在这种情况下,您只设置了 VirtualServer 级别的那些,例如“tm:ltm:virtual:virtualcollectionstate”类型而不是“tm:ltm:virtual:virtualstate”类型
猜你喜欢
  • 2016-04-19
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2012-08-23
  • 1970-01-01
相关资源
最近更新 更多