SpringMVC之JSON数据传输参数

news2024/9/22 1:31:49

目录

一:JSON普通数组

二:JSON对象数据

三:JSON对象数组


       前面我们说过,现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是==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.0</version>
</dependency>

步骤2:PostMan发送JSON数据

步骤3:开启SpringMVC注解支持

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

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

步骤4:参数前添加@RequestBody
 

//使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
    System.out.println("list common(json)参数传递 list ==> "+likes);
    return "{'module':'list common for json param'}";
}

步骤5:启动运行程序

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

二:JSON对象数据

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

请求和数据的发送:

{
	"name":"itcast",
	"age":15
}

后端接收数据:  

@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
    System.out.println("pojo(json)参数传递 user ==> "+user);
    return "{'module':'pojo for json param'}";
}

启动程序访问测试

说明:

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

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

{
	"name":"itcast",
	"age":15,
    "address":{
        "province":"beijing",
        "city":"beijing"
    }
}

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

三:JSON对象数组

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

请求和数据的发送:

[
    {"name":"itcast","age":15},
    {"name":"itheima","age":12}
]

后端接收数据:  

@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list){
    System.out.println("list pojo(json)参数传递 list ==> "+list);
    return "{'module':'list pojo for json param'}";
}

启动程序访问测试

 

小结

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接收请求参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++11中的多线程的支持

C11中的多线程的支持 千禧年以后&#xff0c;主流的芯片厂商都开始生产多核处理器&#xff0c;所以并行编程越来越重要了。在C98中根本没有自己的一套多线程编程库,它采用的是C99中的POSIX标准的pthread库中的互斥锁,来完成多线程编程。 首先来简单一个概念:原子操作,即多线程…

目标检测框架在目标跟踪中的应用

目标检测框架在目标跟踪中的应用 从SiamRPN将跟踪问题定义为one-shot detection任务之后&#xff0c;出现了大量将检测组件由于跟踪的研究。不过Siamese系列一个很大的问题在于其本质仍然是一个模板匹配问题&#xff0c;网络关注的是寻找与target相似的东西&#xff0c;而忽视…

HCIA之数据发送过程

数据发送过程1、同广播域2、跨广播域&#xff08;需要将数据发送给网关&#xff0c;这通过路由器发包&#xff09;&#xff1a;总结1、同广播域 假设PC1要与PC2通讯&#xff1b; PC1不知道PC2的MAC地址&#xff0c;先发送ARP找到PC2的MAC地址&#xff1b; PC1知道了PC2的MAC地…

使用Python Seaborn绘制热力图(heatmap)的时候怎么改变配色

看到最近有些论文中会对Transformer encoder的attention weights进行可视化&#xff0c;通常会使用heatmap&#xff0c;我参考了一些博客&#xff0c;感觉已经总结得很详细了&#xff0c;例如这篇&#xff1a;python绘制热度图(heatmap)_黄思博呀的博客-CSDN博客_python heatma…

pm2:ecosystem.config.js

一、理解ecosystem.config.js1.1、字面理解&#xff1a;pm2生态系统配置文件。1.2、个人理解&#xff1a;pm2配置文件。类似于vite.config.ts、nuxt.config.ts。1.3、理解pm2&#xff1a;pm2 是一个带有负载均衡功能的Node应用的进程管理器。1.4、pm2的能力&#xff1a;1.4.1、…

【React】React入门(一)--React的创建、Jsx语法与组件以及状态(state)

&#x1f380;个人主页&#xff1a;努力学习前端知识的小羊 感谢你们的支持&#xff1a;收藏&#x1f384; 点赞&#x1f36c; 加关注&#x1fa90; 文章目录React简介react的特性虚拟Dom传统dom更新虚拟Domcreate-react-appJSX语法与组件jsx语法class组件函数组件组件嵌套组件…

基于Springboot搭建java项目(三十六)—— 服务监控工具WGCLOUD

服务监控工具WGCLOUD 一、服务监控 ​ “要想晚上睡的好&#xff0c;服务监控少不了”&#xff0c;服务器监控是应用程序开发中必不可少的一部分&#xff0c;做好服务监控有以下几个优点&#xff1a; 能够及时发现应用程序的漏洞能够定位到程序运行的瓶颈&#xff0c;查看程…

一篇搞懂SQL

前言 根据廖雪峰老师的教程&#xff0c;整理出一篇文章 一&#xff0c;为什么需要数据库&#xff1f; 小量的数据可以使用excel或者cvs存储&#xff0c;但是大批量的数据&#xff0c;这些都无法满足需求。如何管理这些数据就成了大问题。 所以&#xff0c;数据库作为一种专门…

机器视觉_HALCON_HDevelop用户指南_5.HDevelop过程(打磨ing)

文章目录五、HDevelop过程5.1. 过程类型5.2. 文件类型5.2.1. HDevelop程序5.2.2. 过程文件5.2.3. 库5.3. 过程作用域5.4. 过程位置5.5. 过程解析5.6. 受保护的过程5.7. 过程文档5.8. 即时编译&#x1f53a;五、HDevelop过程 Procedure&#xff1a; 在HDevelop文档中&#xff08…

【PyTorch】ImageNet数据集的使用和miniImageNet的构建

【PyTorch】ImageNet的使用和miniImageNet的构建1. ImageNet下载和简介1.1 下载地址1.2 初步处理1.3 devkit介绍2. miniImageNet2.1 miniImageNet的划分3. 使用ImageFolder构建数据集类3.1 重写DataFolder中的方法3.2 BatchSampler实现episode采样3.3 batch可视化1. ImageNet下…

Oracle数据库入门大全

oracle数据库 Oracle 数据库、实例、用户、表空间、表之间的关系 数据库 数据库是数据集合。Oracle是一种数据库管理系统&#xff0c;是一种关系型的数据库管理系统。 通常情况了我们称的“数据库”&#xff0c;并不仅指物理的数据集合&#xff0c;他包含物理数据、数据库管理…

let/const相关内容(五)

1.块级作用域的应用 &#xff08;一&#xff09;if-switch-for代码中的应用 ① if语句的代码就是块级作用域 // if语句的代码块是块级作用域 if (true) {var foo "foo"let bar "bar" }console.log(foo) console.log(bar);② switch语句的代码也是块级…

SQL面试题62--一种准确求近30天消费金额的方法

1 需求现在test表有三个字段 用户&#xff1a; user_id 日期&#xff1a;dt 订单金额 price&#xff0c;计算出一个消费者历史上“首次”在近30天周期内累计消费金额达到1W的日期2 分析&#xff08;1&#xff09;数据准备create table test as select a as user_id,7000 as pri…

数据分析很火吗?千万不要轻易尝试!

据说数据分析现在很火&#xff1f;“现在是数字化时代&#xff0c;工作生活都是与互联网交织在一起&#xff0c;我们的生活习惯、兴趣爱好等都会演变成各种不同的数据被互联网收集存储&#xff08;云存储&#xff09;。作为个人而言这些数据单看的话是没有什么价值和意义的&…

安全卫“视”!昂视助力极片卷绕对齐度检测

价格大涨、产能扩充、加速融资、加快出海、与车企深度绑定&#xff0c;动力电池产业在2022年表现出了极高的市场活力&#xff0c;在疫情的大环境之下&#xff0c;其发展势头是业内外公认的“高亢”。全国乘用车市场信息联席会预计&#xff0c;2023年新能源乘用车销量有望达850万…

SCI论文阅读-深度学习在测井气体红外光谱定量分析中的应用

期刊&#xff1a; Applied Optics中科院最新分区&#xff08;2022年12月最新版&#xff09;&#xff1a;4区影响因子&#xff08;2021-2022&#xff09;&#xff1a;1.905第一作者&#xff1a;宋丽梅通讯作者&#xff1a;Yangang Yang原文链接&#xff1a;Application of deep …

一文弄懂什么是对比学习(Contrastive Learning)

本文是自己学习对比学习的总结&#xff0c;如有问题&#xff0c;欢迎批评指正。 前言 有的paper将对比学习称为自监督学习&#xff08;Self-supervised learning&#xff09;&#xff0c;有的将其称为无监督学习&#xff08;Unsupervised Learning , UL&#xff09;。自监督学…

spring事务执行流程分析_6(事务的真正执行)

代理对象的执行 执行案例中的bookService.addUser(user);会调用到JdkDynamicAopProxy#invoke方法 JdkDynamicAopProxy#invoke public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object oldProxy null;boolean setProxyContext false;…

2023年黑马Java入门到精通教程--编程思维训练

编程案例分享 编程思维 使用所学的Java技术解决问题的思维方式和编写代码实现出来的能力。 关于提升编程思维和编程能力的建议 编程思维和编程能力不是一朝一夕形成的&#xff0c;需要时间的沉淀和大量练习。 前期&#xff1a;先模仿&#xff0c;后期&#xff1a;再创新。…

为游戏玩家提供卓越价值,英特尔锐炫游戏性能大幅提升!

2月1日晚英特尔推出锐炫显卡新版驱动(4086)&#xff0c;相较此前驱动(3490)能够为DirectX 9游戏带来40%以上的平均性能提升。同时英特尔还宣布&#xff0c;现在起锐炫A750限量版显卡的全球价格将调整为249美元&#xff0c;此前上市价格为289美元起。 在英特尔发布锐炫显卡后&…