簡體   English   中英

Spring HATEOAS在反序列化JSON時添加外部內容

[英]Spring HATEOAS add external content while deserializing JSON

我正在創建一個客戶端以查詢我們的JSON Api,並且嘗試使用來自另一個資源的內容來擴展資源。 我之所以要這樣做,是因為資源是同一實體的一部分,而我們的用戶將獲得單個實體,而無需分別查詢兩個服務。 我將在此處放置資源的基本版本,以更好地解釋問題:

/* Sample class */
public class Sample {

    public String accession;
    public String name;
    //...
    public Map<RelationType, List<Relation>> relations
    // ... classic getters and setters
}

// Relation class 
public class Relation {
    public String id;
    // getters and setters
}

現在,JSON Api與此類似:這里是示例

{  
    "_embedded":{  
        "samples":[  
            {  
                "accession":"SAME1500861",
                "name":"1380435",
                "_links":{  
                    "self":{      "href":"https://www.ebi.ac.uk/biosamples/api/samples/SAME1500861"
                    },
                    "sample":{  
                        "href":"https://www.ebi.ac.uk/biosamples/api/samples/SAME1500861"
                    },
                    "relations":{  
                        "href":"https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861"
                    }
                }
            }
        ]
    },
    "_links":{ }
}

這里的關系:

{
  "accession": "SAME1500861",
  "_links": {
    "self": {
      "href": "https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861"
    },
    "derivedFrom": {
      "href": "https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/derivedFrom"
    },
    "derivedTo": {
      "href": "https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/derivedTo"
    },
    "externalLinks": {
      "href": "https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/externalLinks"
    },
    "recuratedTo": {
      "href": "https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/recuratedTo"
    }
  }
}

任何建議都很好。 謝謝

您只需要創建一個Java類結構即可表示JSON中的數據。 您可以使用任何在線查看器或某些chrome擴展程序來查看狹窄...

我剛剛完成了您與JSON關系的一小部分...

public class Relations {

    public String accession;
    public Links _links;
}

public class Links {
    public Self self;
}

public class Self {
    public String href;
}

這在我眼中至少有兩個選擇...

  1. 以字符串形式檢索JSON並通過Gson進行轉換
  2. 使用spring RestTemplate

基本上我建議使用Spring RestTemplate

RestTemplate restTemplate = new RestTemplate();

Relations result = restTemplate.getForObject("https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861", Relations.class);

或者,您可以使用任何庫來獲取JSON響應並通過Gson進行轉換

    String relationsPart = "{\n" + "  \"accession\": \"SAME1500861\",\n" + "  \"_links\": {\n" + "    \"self\": {\n" + "      \"href\": \"https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861\"\n" + "    }\n" + "  }\n" + "}";
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    Relations result = gson.fromJson(relationsPart, Relations.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM