用于解析JSON的简单Spring代码

我是一个spring的新手。 写了一个非常简单的代码,从http://api.engin.umich.edu/hostinfo/…PONT&room=B505的API调用中获取一个JSON对象数组

只获取“名称:NULL”

import org.springframework.web.client.RestTemplate; public class Application { public static void main(String args[]) { RestTemplate restTemplate = new RestTemplate(); Computer[] computer = restTemplate.getForObject("http://api.engin.umich.edu/hostinfo/v1/computers.json?building=PIERPONT&room=B505", Computer[].class); System.out.println("Name: " + computer[0].getName()); } } 

这是简单的计算机课程。

 package hello; import org.codehaus.jackson.annotate.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Computer { private String hostname; public String getName() { return hostname; } public String toString() { return "Computer [hostname=" + hostname + "]"; } } 

经过测试和工作!

一些观察:

  • 如果您对Spring framework了解不多,那就没关系了。 serialize/deserialize JSON可以通过多种方式完成。

  • 我看过你的JSON包含一些像classstring这样的reserved字。 为了处理这个问题,您需要使用@JsonProperty注释(稍后您将在Computer.java和其他人处看到它) 。 我还使用此注释来声明JSON属性中包含下划线的一些variables (请记住,您的DTO's [beans]必须具有相同的structuredatatypes并且还使用相同的JSON属性名称)。

  • 解决有关RestTemplate object的问题(我不确定您在使用Computer[].class时是否正确地执行此操作Computer[].class 。 作为建议,请考虑关注/检查此code段: https : //stackoverflow.com/a/6349488/1178686


  • 这只是个人的:如果您认为这个答案符合您的要求,请不要忘记单击答案旁边的复选框来选择它,我只是输入这个,因为您是新来的,没有冒犯。

码:

  • 我已经实现了四个类,其中三个作为DTO's [beans]Computer.javaLoad.javaLocation.java和一个测试classJSONParse.java 请查看代码!

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仅用于测试目的。

 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()); } } } 

上述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 

请享用!