I have created a REST service which sends GET requests to retrieve a JSON response from a specified URL.
I have got it working to the point where I retrieve the JSON message successfully although my next issue is converting the JSON message to JAVA Objects.
Below is my Rest Client:
public class RestADClient {
// HTTP GET request
public String sendGet(String url) throws Exception {
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    // optional default is GET
    con.setRequestMethod("GET");
    //add request header
    con.setRequestProperty("Authorization", "myAuthorizationProp");
    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);
    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();
    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();
    System.out.println("Response Message: " + response.toString());
    ObjectMapper mapper = new ObjectMapper();
    try {
        // Convert JSON string to Object
        String jsonInString = "[{  \"frequency\": \"ONE_MIN\",  \"metricId\": 2253538,  \"metricName\": \"DB|Server:1|IO|Data File Average Read Size\",  \"metricPath\": \"Databases|X|IO|Data File Average Read Size\",  \"metricValues\": [  {    \"count\": 14,    \"current\": 65323,    \"max\": 65536,    \"min\": 0,    \"occurrences\": 0,    \"standardDeviation\": 0,    \"startTimeInMillis\": 1447927800000,    \"sum\": 251408,    \"useRange\": true,    \"value\": 17958  }]}]";
        ADMetrics adMetrics = mapper.readValue(jsonInString, ADMetrics.class);
        System.out.println(adMetrics);
    } catch (JsonGenerationException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return response.toString();
}
}
Below is my ADMetrics POJO class:
import java.util.List;
public class ADMetrics {
private String frequency;
private int metricId;
private String metricName;
private String metricPath;
private List<String> metricValues;
private int count;
private int current;
private int max;
private int min;
private int occurences;
private int standardDeviation;
private int startTimeInMillis;
private int sum;
private boolean useRange;
private int value;
public String getFrequency() {
    return frequency;
}
public void setFrequency(String frequency) {
    this.frequency = frequency;
}
public int getMetricId() {
    return metricId;
}
public void setMetricId(int metricId) {
    this.metricId = metricId;
}
public String getMetricName() {
    return metricName;
}
public void setMetricName(String metricName) {
    this.metricName = metricName;
}
public String getMetricPath() {
    return metricPath;
}
public void setMetricPath(String metricPath) {
    this.metricPath = metricPath;
}
public List<String> getMetricValues() {
    return metricValues;
}
public void setMetricValues(List<String> metricValues) {
    this.metricValues = metricValues;
}
public int getCount() {
    return count;
}
public void setCount(int count) {
    this.count = count;
}
public int getCurrent() {
    return current;
}
public void setCurrent(int current) {
    this.current = current;
}
public int getMax() {
    return max;
}
public void setMax(int max) {
    this.max = max;
}
public int getMin() {
    return min;
}
public void setMin(int min) {
    this.min = min;
}
public int getOccurences() {
    return occurences;
}
public void setOccurences(int occurences) {
    this.occurences = occurences;
}
public int getStandardDeviation() {
    return standardDeviation;
}
public void setStandardDeviation(int standardDeviation) {
    this.standardDeviation = standardDeviation;
}
public int getStartTimeInMillis() {
    return startTimeInMillis;
}
public void setStartTimeInMillis(int startTimeInMillis) {
    this.startTimeInMillis = startTimeInMillis;
}
public int getSum() {
    return sum;
}
public void setSum(int sum) {
    this.sum = sum;
}
public boolean isUseRange() {
    return useRange;
}
public void setUseRange(boolean useRange) {
    this.useRange = useRange;
}
public int getValue() {
    return value;
}
public void setValue(int value) {
    this.value = value;
}
Below is my JUnit test:
public class ADTest {
String url = "myURL";
@Test
public void testResponseContainsMetricFrequency() throws Exception {
    RestADClient restADClient = new RestADClient();
    assertTrue(restADClient.sendGet(url).contains("frequency"));
}}
When I run the test, I get the following:
Response Code : 200
Response Message: [{ "frequency": "ONE_MIN", "metricId": 2253538, "metricName": "DB|Server:169|IO|Data File Average Read Size", "metricPath": "Databases|QA-CARS|IO|Data File Average Read Size", "metricValues": [ { "count": 13, "current": 66013, "max": 72003, "min": 0, "occurrences": 0, "standardDeviation": 0, "startTimeInMillis": 1447929360000, "sum": 198688, "useRange": true, "value": 15284 }]}]
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of rest.client.ADMetrics out of START_ARRAY token at [Source: java.io.StringReader@78b729e6; line: 1, column: 1]
 
     
     
    