• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringMVC项目请求(JSON数据传输参数)

武飞扬头像
Mr.D.Chuang
帮助1

现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是JSON,所以前端如果发送的是JSON数据,后端该如何接收?

对于JSON数据类型,我们常见的有三种:

  • json普通数组([“value1”,“value2”,“value3”,…])
  • json对象({key1:value1,key2:value2,…})
  • json对象数组([{key1:value1,…},{key2:value2,…}])

对于上述数据,前端如何发送,后端如何接收?

JSON普通数组

步骤1:pom.xml添加依赖

SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖

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

步骤2:PostMan发送JSON数据

学新通

步骤3:开启SpringMVC注解支持

在SpringMVC的配置类中开启SpringMVC的注解支持,这里面就包含了将JSON转换成对象的功能。

@Configuration
@ComponentScan("com.dcxuexi.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

步骤4:参数前添加@RequestBody

//使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
    @RequestMapping("/listjJsonParam")
    @ResponseBody
    public String listParamForJson(@RequestBody List<String> citys){
        System.out.println("Json List参数传递 citys ==> "   citys);
        return citys.toString();
    }

步骤5:启动运行程序

学新通

学新通

JSON普通数组的数据就已经传递完成,下面针对JSON对象数据和JSON对象数组的数据该如何传递呢?

JSON对象数据

我们会发现,只需要关注请求和数据如何发送?后端数据如何接收?

请求和数据的发送:

{
    "userName": "xiaochuang",
    "userAge": 20,
    "userSex": "man"
}

学新通

后端接收数据:

    @RequestMapping("/jsonParam")
    @ResponseBody
    public String userParamForJson(@RequestBody User user){
        System.out.println("Json参数传递 user ==> "   user);
        return user.toString();
    }

启动程序访问测试

学新通

说明:

city为null的原因是前端没有传递数据给后端。

如果想要city也有数据,我们需求修改前端传递的数据内容:

{
    "userName": "xiaochuang",
    "userAge": 20,
    "userSex": "man",
    "city": {
        "country": "China",
        "provice": "ShangHai",
        "area": "PuDong"
    }
}

再次发送请求,就能看到city中的数据

学新通

JSON对象数组

集合中保存多个POJO该如何实现?

请求和数据的发送:

[
    {
        "userName": "xiaochuang",
        "userAge": 20,
        "userSex": "man",
        "city": {
            "country": "China",
            "provice": "ShangHai",
            "area": "PuDong"
        }
    },
    {
        "userName": "zhangsan",
        "userAge": 18,
        "userSex": "man",
        "city": {
            "country": "China",
            "provice": "BeiJing",
            "area": "HaiDian"
        }
    },
    {
        "userName": "lily",
        "userAge": 22,
        "userSex": "woman",
        "city": {
            "country": "China",
            "provice": "AnHui",
            "area": "HeFei"
        }
    }
]
学新通

学新通

后端接收数据:

    @RequestMapping("/userListParam")
    @ResponseBody
    public String userListParamForJson(@RequestBody List<User> userList){
        System.out.println("Json参数传递 userList ==> "   userList);
        return userList.toString();
    }

启动程序访问测试

学新通

小结

SpringMVC接收JSON数据的实现步骤为:

(1)导入jackson包

(2)使用PostMan发送JSON数据

(3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解

(4)Controller方法的参数前添加@RequestBody注解

知识点1:@EnableWebMvc

名称 @EnableWebMvc
类型 配置类注解
位置 SpringMVC配置类定义上方
作用 开启SpringMVC多项辅助功能

知识点2:@RequestBody

名称 @RequestBody
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

@RequestBody与@RequestParam区别

  • 区别

    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
    • @RequestBody用于接收json数据【application/json】
  • 应用

    • 后期开发中,发送json格式数据为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数

项目代码

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhebjifa
系列文章
更多 icon
同类精品
更多 icon
继续加载