【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

 

posted @   逆火狂飙  阅读(626)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-02-15 将高考成绩流水表转化成高考成绩汇总表
2020-02-15 万里挑一进清北
2020-02-15 生成十万考生的语数英理化高考成绩流水表
2017-02-15 【Canvas与艺术】绘制六叶草繁花似锦桌面(1920*1080)
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示