【SpringMVC】JSON数据交互

JSON简介

JSON数据结构一种与开发语言无关的、轻量级的数据存储格式,全称JavaScript Object
Notation,一种数据格式的标准规范,起初来源于JavaScript这门语言,后来随着使用的广泛,几乎每门开发语言都有处理JSON的API 。

优点:易于人的阅读和编写,易于程序解析与生产,它相比xml格式的数据结构,占用的数据控件更小。

响应JSON数据

目前Java有很多JSON解析框架,如Gsonjacksonfastjson等。对于Gson和jackson这两个json处理依赖,直接添加即可。 除此之外,其他的json解析器如fastjson都需要手动配置HttpMessageConverter.实际上,在SpringMVC中,是由一个名叫HttpMessageConverter的类来提供对象到JSON字符串的转换的。而SpringMVC默认就提供了Gson和Jackson的HttpMessageConverter,分别是GsonHttpMessageConverter和MappingJackson2HttpMessageConverter。对于其他的JSON解析器,只需要开发者手动配置一下HttpMessageConverter即可。
我们以jackson为例 演示JSON数据的交互

第一步:创建工程

可以参考【SpringMVC】SpringMVC入门实例创建一个SpringMVC工程,或者在【SpringMVC】Controller注解及请求参数详解基础上继续添加JSON功能,我们就在【SpringMVC】Controller注解及请求参数详解工程上继续修改

pom.xml文件中添加jackson依赖

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.11.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.0</version>
    </dependency>

第二步:创建Controller

在返回对象上添加@ResponseBody注解即可

@Controller
@RequestMapping("/json")
public class JSONControl {
    @GetMapping(value = "/user")
    @ResponseBody
    public User user(){
        User user = new User();
        user.setId(1);
        user.setAge(18);
        user.setName("lucas");
        return  user;
    }

    @RequestMapping(value = "/users")
    @ResponseBody
    public List<User> users(){
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId(i);
            user.setAge(18);
            user.setName("lucas");
            users.add(user);
        }
        return  users;
    }

    @RequestMapping("/map")
    @ResponseBody
    public Map<String, Object> map() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", 1);
        map.put("name", "lucas");
        map.put("age", 18);
        return map;
    }
}

第三步:测试运行

返回JSON对象
在这里插入图片描述
返回JSON数组
在这里插入图片描述

返回map在这里插入图片描述

接收JSON请求数据

首先来看一下项目结构
在这里插入图片描述
index.jsp中添加一个ajax请求,请求的contentTypejson类型

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
     <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<h2>Hello World!</h2>
<input type="button" value="提交JSON数据" onclick="commit();">
<script type="text/javascript">
    function commit(){
        $.ajax({
            type: 'POST',
            url: "${pageContext.request.contextPath}/json/jsonrequest",
            contentType: "application/json",
            data: JSON.stringify({"name":"lucas","age":"18","id":1}),
            dataType: "json",//期待返回的数据类型
            success: function(data){
                alert(data);
            },
            error:function(data){
                alert("error"+data);
            }
        });
    }
</script>
</body>
</html>

在control中添加请求处理,并将结果打印和返回JSON数据

@Controller
@RequestMapping("/json")
public class JSONControl {

    @PostMapping("/jsonrequest")
    @ResponseBody
    public Map<String, Object>  jsonrequest(@RequestBody User user) {
        System.out.println(user);
        HashMap<String, Object> map = new HashMap<>();
        map.put("code", 0);
        map.put("msg", "请求成功");
        map.put("data", user);
        return  map;
    }
}

运行结果

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huweiliyi/article/details/107802909