簡體   English   中英

消費休息服務

[英]Consuming Rest Service

我剛開始使用休息服務,我已經閱讀了這個https://spring.io/guides/gs/sumption-rest/ 然后根據本教程,我有一個服務可以消費和顯示。 該服務是一個休息 api,我得到一個這樣的 json

 {
"disclaimer": "1",
"license": "2",
"timestamp": 1458057661,
"base": "someValue",
   "rates": {
     "one": 3.673019,
     "two": 68.449999,
   "three": 124.168,
  "four": 488.669996,
    ...,
     ...,
   ...
   }
}

然后我創建了 2 個這樣的 Java 類

@JsonIgnoreProperties(ignoreUnknown = true)
public class Cur {

private String disclaimer;
private String license;
private String timestamp;
private String base;    
private Rates rates;

public Cur() {
    super();
}

///get/set 


///tostring

}

@JsonIgnoreProperties(ignoreUnknown = true)
 public class Rates {

public Rates(){

    //// i am not sure here how  should i get the rates value.
   }

 }

問題是我如何填充 Rates 類以將數據放入變量中,以便稍后我可以呈現視圖。 我使用 RestTemplate。 這是測試。它有效,但我沒有費率值。 我想我需要一個地圖,因為它是一個集合。任何想法如何實現它。

@Test
public void getCurTest() { 
    String URL="some url";
    String JSONTYPE="some json type";
    String API="some id";
    RestTemplate restTemplate = new RestTemplate();         
    Cur cur= restTemplate.getForObject(URL+JSONTYPE+API, Cur.class);
    log.info("cur");        
    System.out.println(cur);
}

你的 JSON 是這樣的,為了讓 Rates 填充你的類應該是這樣的。

public class Cur {

    private String disclaimer;
    private String license;
    private Integer timestamp;
    private String base;
    private Rates rates;

}

public class Rates {

    private Double one;
    private Double two;
    private Double three;
    private Double four;
    //This would be better but the JSON dosnt fit this 
    //private Map<String, Double> rates;

}

您嘗試使用哪個 API?

幾年前我也有過,這有點奇怪。 在這里你可以做什么。

第一個解決方案

簡單的方法是

 CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpget = new HttpGet("your rest service api");
    CloseableHttpResponse response = httpclient.execute(httpget);
    try {
        HttpEntity entity = response.getEntity();

        if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
            String responseValue = EntityUtils.toString(entity);
            System.out.println(responseValue);
        } else {
            // log error
        }
    } finally {
        response.close();
    }
}

然后,您可以將所有內容作為字符串獲取,並使用正則表達式解析它並獲得您想要的內容。

第二種解決方案

您可以將所有其他內容按原樣保存到數據庫中。 使用 mongodb 更快。
然后你可以把它從那里拿到一個班級並使用它。

第三種解決方案

使用這個工具http://www.jsonschema2pojo.org/只需粘貼你的 json,它就會創建你的 java 類來使用它們。 您可以選擇要添加的內容。 這將創建您的類,然后您可以使用它們。 這里是為了您的方便。

package com.example;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import org.apache.commons.lang.builder.ToStringBuilder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"disclaimer",
"license",
"timestamp",
"base",
"rates"
})
public class Example {

@JsonProperty("disclaimer")
private String disclaimer;
@JsonProperty("license")
private String license;
@JsonProperty("timestamp")
private Integer timestamp;
@JsonProperty("base")
private String base;
@JsonProperty("rates")
private Rates rates;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

/**
* No args constructor for use in serialization
*
*/
public Example() {
}

/**
*
* @param timestamp
* @param disclaimer
* @param base
* @param rates
* @param license
*/
public Example(String disclaimer, String license, Integer timestamp, String base, Rates rates) {
this.disclaimer = disclaimer;
this.license = license;
this.timestamp = timestamp;
this.base = base;
this.rates = rates;
}

/**
*
* @return
* The disclaimer
*/
@JsonProperty("disclaimer")
public String getDisclaimer() {
return disclaimer;
}

/**
*
* @param disclaimer
* The disclaimer
*/
@JsonProperty("disclaimer")
public void setDisclaimer(String disclaimer) {
this.disclaimer = disclaimer;
}

/**
*
* @return
* The license
*/
@JsonProperty("license")
public String getLicense() {
return license;
}

/**
*
* @param license
* The license
*/
@JsonProperty("license")
public void setLicense(String license) {
this.license = license;
}

/**
*
* @return
* The timestamp
*/
@JsonProperty("timestamp")
public Integer getTimestamp() {
return timestamp;
}

/**
*
* @param timestamp
* The timestamp
*/
@JsonProperty("timestamp")
public void setTimestamp(Integer timestamp) {
this.timestamp = timestamp;
}

/**
*
* @return
* The base
*/
@JsonProperty("base")
public String getBase() {
return base;
}

/**
*
* @param base
* The base
*/
@JsonProperty("base")
public void setBase(String base) {
this.base = base;
}

/**
*
* @return
* The rates
*/
@JsonProperty("rates")
public Rates getRates() {
return rates;
}

/**
*
* @param rates
* The rates
*/
@JsonProperty("rates")
public void setRates(Rates rates) {
this.rates = rates;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}


package com.example;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import org.apache.commons.lang.builder.ToStringBuilder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"one",
"two",
"three",
"four"
})
public class Rates {

@JsonProperty("one")
private Double one;
@JsonProperty("two")
private Double two;
@JsonProperty("three")
private Double three;
@JsonProperty("four")
private Double four;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

/**
* No args constructor for use in serialization
*
*/
public Rates() {
}

/**
*
* @param two
* @param one
* @param three
* @param four
*/
public Rates(Double one, Double two, Double three, Double four) {
this.one = one;
this.two = two;
this.three = three;
this.four = four;
}

/**
*
* @return
* The one
*/
@JsonProperty("one")
public Double getOne() {
return one;
}

/**
*
* @param one
* The one
*/
@JsonProperty("one")
public void setOne(Double one) {
this.one = one;
}

/**
*
* @return
* The two
*/
@JsonProperty("two")
public Double getTwo() {
return two;
}

/**
*
* @param two
* The two
*/
@JsonProperty("two")
public void setTwo(Double two) {
this.two = two;
}

/**
*
* @return
* The three
*/
@JsonProperty("three")
public Double getThree() {
return three;
}

/**
*
* @param three
* The three
*/
@JsonProperty("three")
public void setThree(Double three) {
this.three = three;
}

/**
*
* @return
* The four
*/
@JsonProperty("four")
public Double getFour() {
return four;
}

/**
*
* @param four
* The four
*/
@JsonProperty("four")
public void setFour(Double four) {
this.four = four;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}

然后你可以隨意使用它。

我希望這一切都會有所幫助。 小心。

暫無
暫無

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

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