• 【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

  • 相关阅读:
    test1
    servlet的生命周期
    关与JdbcTemplate"的thread "main" org.springframework.jdbc.BadSqlGrammarException
    正则表达式
    @Autowired和@Resource的区别
    kubernetes安装
    docker相关
    KIBANA
    mysql在centos上安装
    MySql不错的文章
  • 原文地址:https://www.cnblogs.com/heyang78/p/15894885.html
Copyright © 2020-2023  润新知