【SpringBoot】JSon串的提供、获取和解读
【提供部分】
说明:SpringBoot程序要提供Json串供外界访问,只需要@RestController标签即可,具体代码如下:
import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.hy.mybank.Entity.Clazz; import com.hy.mybank.Entity.Student; @RestController public class JsonController { ...... @GetMapping("/fetchJson") public Map<String,Object> fetchJson() { Map<String,Object> retvalMap=new LinkedHashMap<String,Object>(); Clazz cls=new Clazz(1,"大一"); cls.addStudents(new Student(1,"刘德华")); cls.addStudents(new Student(2,"郭富城")); cls.addStudents(new Student(3,"张学友")); cls.addStudents(new Student(4,"黎明")); retvalMap.put("status", true); retvalMap.put("class", cls); return retvalMap; } ...... }
以上程序用到的clazz类和student类:
package com.hy.mybank.Entity; import java.util.ArrayList; import java.util.List; public class Clazz { private long id; private String name; private List<Student> students; public Clazz(long id,String name) { this.id=id; this.name=name; } public void addStudents(Student stu) { if(students==null) { students=new ArrayList<Student>(); } students.add(stu); } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }
package com.hy.mybank.Entity; /** * 和Test表对应的实体类 * @author ufo * */ public class Student { private int id; private String name; public Student(int id,String name) { this.id=id; this.name=name; } public Student() { this(-1,"unidentified"); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
之后,在浏览器中输入:http://localhost:8080/fetchJson
以下Json串就会出现:
{"status":true,"class":{"id":1,"name":"大一","students":[{"id":1,"name":"刘德华"},{"id":2,"name":"郭富城"},{"id":3,"name":"张学友"},{"id":4,"name":"黎明"}]}}
【获取部分】
要用Java程序获取位于http://localhost:8080/fetchJson的rest服务内容,只需要RestTemplate的帮助,具体如下:
RestTemplate rt=new RestTemplate(); String json = rt.getForObject("http://localhost:8080/fetchJson",String.class);
下面打印的就是获取到的json内容,和上面返回的json一致。
{"status":true,"class":{"id":1,"name":"大一","students":[{"id":1,"name":"刘德华"},{"id":2,"name":"郭富城"},{"id":3,"name":"张学友"},{"id":4,"name":"黎明"}]}}
赘述一下RestTemplate无需另引入依赖,它本身就是SpringBoot程序的一部分。
【解读部分】
解读用SpringBoot自带的ObjectMapper就行了,和RestTemplate一样,它也是SpringBoot程序的一部分。
解读json串各节点的代码如下:
package com.hy.mybank; import java.util.Iterator; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class ReadJsonTest { public static void main(String[] args) throws Exception{ RestTemplate rt=new RestTemplate(); String json = rt.getForObject("http://localhost:8080/fetchJson",String.class); ObjectMapper mapper = new ObjectMapper(); // 获取根节点 JsonNode node = mapper.readTree(json); // 找根节点下class节点里的students节点组 JsonNode listNode=node.get("class").path("students"); Iterator<JsonNode> iterator = listNode.elements(); while (iterator.hasNext()) { JsonNode student = iterator.next(); // 获取节点文本 String name=student.get("name").asText(); System.out.println(name); } } }
输出的结果是:
刘德华
郭富城
张学友
黎明
大家可以拿程序、结果和Rest服务提供的字串比对一下,相信很快就能领会解读程序的写法。
END