Spring Boot处理JSON数据

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot处理JSON数据相关的知识,希望对你有一定的参考价值。

Spring Boot处理JSON数据

在Spring Boot的Web应用中,内置JSON数据解析功能,默认使用Jackson自动解析,不需要加载Jackson依赖包,当控制器返回一个Java对象或者集合数据时,SpringBoot自动将其转换为Json格式数据,使用起来方便简洁。

SpringBoot处理JSON数据时,需要用到两个重要的JSON转换注解,分别是@RequestBody和@ResponseBody。
@RequestBody:将请求主体的数据绑定到形参上,该注解应用在方法的形参上
@ResponseBody:直接返回Json对象,该注解应用在方法上。

下面用一个实例学习SpringBoot处理Json数据的过程,该实例针对返回List集合做处理。

1-创建Maven项目,并在pom.xml文件中添加相关依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Thymeleaf</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <!--配置SpringBoot的核心启动器-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
    </parent>
    <dependencies>
    <dependency>
        <!--添加starter模块-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    </dependencies>

</project>

2-在src/main/java目录下创建包com.model,并在该包中创建实体模型类Person,该模型类包含三个属性,分别为用户名,密码和年龄。

/**
 * 实体模型类,包含用户名,密码,年龄三个属性
 */
public class Person {
    private String pname ;
    private String password ;
    private Integer page ;

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }
}

3-创建视图显示页面,在src/main/resources/templates创建视图页面input.html,在该页面引用jQuery框架,并使用它的ajax方法进行异步请求,同时引入BootStrap框架。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Json数据处理</title>
</head>
<link rel = "stylesheet" th:href = "@{css/bootstrap.min.css}"/>
<link rel = "stylesheet" th:href = "@{css/bootstrap-theme.min.css}"/>
<!--引入jQuery-->
<script type = "text/javascript" th:src="@{js/jquery-3.3.1.min.js}"></script>
<script type = "text/javascript">
    function testJson(){
        //获取输入的pname为id
        var pname = $("#pname").val() ;
        var password = $("#password").val() ;
        var page = $("#page").val() ;
        $.ajax({
            //发送请求的url字符串
            url:"testJson",
            //定义回调相应的数据格式为Json字符串,该属性可以省略
            dataType:"json",
            //请求类型
            type:"post",
            //定义发送请求的数据格式为Json字符串
            contentType:"application/json",
            //data表示发送的数据
            data:JSON.stringify({pname:pname, password:password, page:page}),
            //成功响应的结果
            success:function (data) {
                if(data != null){
                    //返回一个List<Map<String, Object>>对象
                    for(var i=0; i<data.length; i++){
                        alert(data[i].pname +  data[i].password + data[i].page) ;
                    }
                }
            },
            //请求出错
            error:function(){
                alert("数据发送失败") ;
            }
        }) ;
    }
</script>
<body>
<div class = "panel panel-primary">
    <div class = "panel-heading">
        <h3 class = "panel-title">处理JSON数据</h3>
    </div>
</div>
<div class = "container">
    <div>
        <h4>添加用户</h4>
    </div>
        <div class = "row">
            <div class = "col-md-6 col-sm-6">
                <form class="form-horizontal" action="">
                    <div class="form-group">
                        <div class="input-group col-md-6">
                <span class = "input-group-addon">
                    <i class = "glyphicon glyphicon-pencil"></i>
                </span>
                <input class = "form-control" type = "text" id = "pname" th:placeholder="请输入用户名"/>
            </div>
        </div>
        <div class = "form-group">
            <div class = "input-group col-md-6">
                <span class = "input-group-addon">
                      <i class = "glyphicon glyphicon-pencil"></i>
                </span>
                <input class="form-control" type="text" id = "password" th:placeholder = "请输入密码"/>
            </div>
        </div>
        <div class = "form-group">
            <div class = "input-group col-md-6">
                <span class = "input-group-addon">
                      <i class = "glyphicon glyphicon-pencil"></i>
                </span>
                <input class="form-control" type="text" id = "page" th:placeholder = "请输入年龄"/>
            </div>
        </div>
        <div class = "form-group">
            <div class = "col-md-6">
                <div class = "btn-group btn-group-justified">
                    <div class = "btn-group">
                        <button type="button" onclick="testJson()" class = "btn btn-success">
                             <span class =  "glyphicon glyphicon-share"></span>
                            &nbsp;测试
                        </button>
                    </div>
                </div>
            </div>
        </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>

4-创建控制器,在src/main/java目录下创建com.controller包,在该包中创建控制器类TestJsonController,在该类中有两个处理方法,一个是界面导航方法input,另一个是接收页面请求并给予响应的方法。

import com.model.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class TestJsonController {
    //进入视图页面
    @RequestMapping("/input")
    public String input(){
        return "input" ;
    }
    //接收页面请求的Json数据
    @RequestMapping("/testJson")
    @ResponseBody
    public List<Map<String, Object>> testJson(@RequestBody Person user){
        //打印接收的JSON格式数据
        System.out.println("pname = " + user.getPname() + " password = " + user.getPassword() + " page = " + user.getPage());
        List<Map<String, Object>> list = new ArrayList<>() ;
        Map<String, Object> map = new HashMap<>() ;
        map.put("pname", "王国栋") ;
        map.put("password", "123") ;
        map.put("page", 25) ;
        Map<String, Object> map1 = new HashMap<>() ;
        map1.put("pname", "唐乃乔") ;
        map1.put("password", "456") ;
        map1.put("page", 25) ;
        list.add(map) ;
        list.add(map1) ;
        return list ;
    }
}

5-在src/main/java目录下创建com.test包,在该包中创建启动类,运行启动类,然后访问http://localhost:8080/input


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"com"})
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args) ;
    }
}

6-运行结果如下:
视图页面发送的Json数据,通过@RequestBody注解绑定新参获得,在控制台打印

@RespnseBody响应的结果,通过alert()方法响应到视图页面。

以上是关于Spring Boot处理JSON数据的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 处理异常返回json

Spring Boot入门——json数据处理

Spring boot:thymeleaf 没有正确渲染片段

上手spring boot项目之springboot如何返回json数据

精通 Spring Boot 系列 05

spring boot get和post请求,以及requestbody为json串时候的处理