I\'m a spring newbie. Wrote really simple code to get an array of JSON object from the API call at http://api.engin.umich.edu/hostinfo/...PONT&room=B505
Only get \"N
Some observations:
If you don't know so much about Spring
framework
, it doesn't matter. To serialize/deserialize
JSON
can be done in many ways.
I have looked that your JSON
contains some reserved
words like class
or string
. In order to handle this you will need to use @JsonProperty
annotation (you will see it later at Computer.java
and others). I also used this annotation for not declaring some variables
that in your JSON
properties contain underscores (remember that your DTO's
[beans]
must have the same structure
, datatypes
and also use the same JSON
property names).
To resolve the problem regarding your RestTemplate
object
(I am not sure if you are doing it the right way when using Computer[].class
). As a recommendation, please consider following/checking this code
snippet: https://stackoverflow.com/a/6349488/1178686
DTO's
[beans]
: Computer.java
, Load.java
, Location.java
and a test class
: JSONParse.java
. Please review the code!Computer.java
package com.example.dto;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
import org.codehaus.jackson.annotate.JsonProperty;
@XmlRootElement
public class Computer {
private String hostname;
private String vendor;
private String model;
private int swap;
private int memory;
@JsonProperty("sess_count")
private int sessCount;
private List load;
@JsonProperty("in_use")
private boolean inUse;
@JsonProperty("free_in_tmp")
private int freeInTmp;
@JsonProperty("class")
private String clazz;
private List location;
@JsonProperty("last_access")
private String lastAccess;
@JsonProperty("last_report")
private int lastReport;
private String ip;
public String getHostname() {
return hostname;
}
public void setHostname(String hostname) {
this.hostname = hostname;
}
public String getVendor() {
return vendor;
}
public void setVendor(String vendor) {
this.vendor = vendor;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getSwap() {
return swap;
}
public void setSwap(int swap) {
this.swap = swap;
}
public int getMemory() {
return memory;
}
public void setMemory(int memory) {
this.memory = memory;
}
public int getSessCount() {
return sessCount;
}
public void setSessCount(int sessCount) {
this.sessCount = sessCount;
}
public List getLoad() {
return load;
}
public void setLoad(List load) {
this.load = load;
}
public boolean isInUse() {
return inUse;
}
public void setInUse(boolean inUse) {
this.inUse = inUse;
}
public int getFreeInTmp() {
return freeInTmp;
}
public void setFreeInTmp(int freeInTmp) {
this.freeInTmp = freeInTmp;
}
public String getClazz() {
return clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
public List getLocation() {
return location;
}
public void setLocation(List location) {
this.location = location;
}
public String getLastAccess() {
return lastAccess;
}
public void setLastAccess(String lastAccess) {
this.lastAccess = lastAccess;
}
public int getLastReport() {
return lastReport;
}
public void setLastReport(int lastReport) {
this.lastReport = lastReport;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
@Override
public String toString() {
String str = "=================================\r\n";
str += "Hostname: " + hostname + "\r\n" +
"Vendor: " + vendor + "\r\n" +
"Model: " + model + "\r\n" +
"Swap: " + swap + "\r\n" +
"Memory: " + memory + "\r\n" +
"Sess_Count: " + sessCount + "\r\n" +
"Load: " + "\r\n";
for(Load ld : load) {
str += "\t" + "One: " + ld.getOne() + "\r\n";
str += "\t" + "Five: " + ld.getFive() + "\r\n";
str += "\t" + "Fifteen: " + ld.getFifteen() + "\r\n";
}
str += "In_Use: " + inUse + "\r\n" +
"Free_In_Tmp: " + freeInTmp + "\r\n" +
"Class: " + clazz + "\r\n" +
"Location: " + "\r\n";
for(Location lc : location) {
str += "\t" + "Building: " + lc.getBuilding() + "\r\n";
str += "\t" + "Computers: " + lc.getComputers() + "\r\n";
str += "\t" + "Room: " + lc.getRoom() + "\r\n";
str += "\t" + "String: " + lc.getStr() + "\r\n";
}
str += "Ip: " + ip + "\r\n";
str += "Last_Access: " + lastAccess + "\r\n";
str += "Last_Report: " + lastReport + "\r\n";
return str;
}
}
Load.java
package com.example.dto;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Load {
private int one;
private int five;
private int fifteen;
public int getOne() {
return one;
}
public void setOne(int one) {
this.one = one;
}
public int getFive() {
return five;
}
public void setFive(int five) {
this.five = five;
}
public int getFifteen() {
return fifteen;
}
public void setFifteen(int fifteen) {
this.fifteen = fifteen;
}
}
Location.java
package com.example.dto;
import javax.xml.bind.annotation.XmlRootElement;
import org.codehaus.jackson.annotate.JsonProperty;
@XmlRootElement
public class Location {
private String room;
private String building;
private String computers;
@JsonProperty("string")
private String str;
public String getRoom() {
return room;
}
public void setRoom(String room) {
this.room = room;
}
public String getBuilding() {
return building;
}
public void setBuilding(String building) {
this.building = building;
}
public String getComputers() {
return computers;
}
public void setComputers(String computers) {
this.computers = computers;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
JSONParse.java: runnable class
just for testing purposes.
package com.example.main;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.DeserializationConfig.Feature;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import com.example.dto.Computer;
public class JSONParse {
public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException {
/* JSON provider */
URL url = new URL("http://api.engin.umich.edu/hostinfo/v1/computers.json?building=PIERPONT&room=B505");
ObjectMapper mapper = new ObjectMapper();
/*
* This allows the ObjectMapper to accept single values for a collection.
* For example: "location" property in the returned JSON is a collection that
* can accept multiple objects but, in deserialization process, this property just
* have one object and causes an Exception.
*/
mapper.configure(Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
/*
* If some JSON property is not present, avoid exceptions setting
* FAIL_ON_UNKNOWN_PROPERTIES to false
*/
mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
/* Get all computers */
List computers = mapper.readValue(url, new TypeReference>(){});
/* Print each computer (previously overriding "toString()" method) */
for(Computer computer : computers) {
System.out.println(computer.toString());
}
}
}
Output from the above class
:
================================= Hostname: pierb505p13.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9608460 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.23 Last_Access: Last_Report: 1383202078 ================================= Hostname: pierb505p22.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9609244 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.32 Last_Access: Last_Report: 1383201987 ================================= Hostname: pierb505p06.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9606464 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.16 Last_Access: Last_Report: 1383201982 ================================= Hostname: pierb505p17.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9606820 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.27 Last_Access: Last_Report: 1383202064 ================================= Hostname: pierb505p15.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9609052 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.25 Last_Access: Last_Report: 1383202052 ================================= Hostname: pierb505p12.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9607136 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.22 Last_Access: Last_Report: 1383202037 ================================= Hostname: pierb505p03.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9603132 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.13 Last_Access: Last_Report: 1383201964 ================================= Hostname: pierb505p14.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9599592 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.24 Last_Access: Last_Report: 1383201996 ================================= Hostname: pierb505p07.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 0 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9608176 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.17 Last_Access: Last_Report: 1383202127 ================================= Hostname: pierb505p23.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 1 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9600968 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.33 Last_Access: Last_Report: 1383202013 ================================= Hostname: pierb505p11.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 1 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9607224 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.21 Last_Access: Last_Report: 1383202098 ================================= Hostname: pierb505p21.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 1 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9595136 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.31 Last_Access: Last_Report: 1383202035 ================================= Hostname: pierb505p16.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 1 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9601212 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.26 Last_Access: Last_Report: 1383202106 ================================= Hostname: pierb505p04.engin.umich.edu Vendor: Linux Model: Dell 980 Swap: 8126456 Memory: 7797 Sess_Count: 0 Load: One: 1 Five: 0 Fifteen: 0 In_Use: false Free_In_Tmp: 9603220 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.14 Last_Access: Last_Report: 1383202135 ================================= Hostname: pierb505p08.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 16024588 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.18 Last_Access: Last_Report: 1383202133 ================================= Hostname: pierb505p25.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 10299356 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.35 Last_Access: Last_Report: 1383202100 ================================= Hostname: pierb505p26.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 11303888 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.36 Last_Access: Last_Report: 1383202027 ================================= Hostname: pierb505p19.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 15914176 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.29 Last_Access: Last_Report: 1383202081 ================================= Hostname: pierb505p09.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 29956064 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.19 Last_Access: Last_Report: 1383201997 ================================= Hostname: pierb505p10.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 19663960 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.20 Last_Access: Last_Report: 1383202003 ================================= Hostname: pierb505p24.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 19197988 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.34 Last_Access: Last_Report: 1383202038 ================================= Hostname: pierb505p20.engin.umich.edu Vendor: Windows Model: OptiPlex 980 Swap: 0 Memory: 0 Sess_Count: 0 Load: One: 1 Five: 5 Fifteen: 15 In_Use: false Free_In_Tmp: 9585536 Class: L Location: Building: PIERPONT Computers: 26 Room: B505 String: B505 PIERPONT Ip: 141.213.54.30 Last_Access: Last_Report: 1383201994
Enjoy!