Tested and working!
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
- This is just personal: If you consider this answer fits you requirement, don't forget to click the check next to the answer to select it, I am just typing this because you are new here, no offense.
Code:
- I have implemented four classes, three of them as
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> load;
@JsonProperty("in_use")
private boolean inUse;
@JsonProperty("free_in_tmp")
private int freeInTmp;
@JsonProperty("class")
private String clazz;
private List<Location> 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<Load> getLoad() {
return load;
}
public void setLoad(List<Load> 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<Location> getLocation() {
return location;
}
public void setLocation(List<Location> 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<Computer> computers = mapper.readValue(url, new TypeReference<List<Computer>>(){});
/* 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!