java controller json_springMVC的controller层接收前端json数据

1.前端的操作:

对象接收json数据方式:将所需要传的数据转化为json数据,并将这些数据以post方式传到后台的controller层,然后controller层接收json数据,并且是以对象的形式进行接收。

这里面是springmvc自动控制将这些数据转化为对象,不需要辅助包fastjson。

用Map接收json数据:需要使用fastjson包(前提json含有对象数据)。在看github项目的学习过程中,发现:封装的对象中,可以有map类型,更加方便地接收参数,将json数据一一绑定到map映射中,方便我们对json数据操作哦。

2.代码实现:

模拟前端传过来的json数据

{"people": {"username": "Tom","password": "123456","sex": "男","address": {"province": "安徽","city": "芜湖","town": "天堑","village": "小岗村"},"phones": [

{"operator": "中国移动","phoneNumber": "12345678901"},

{"operator": "中国联通","phoneNumber": "09876543211"}

]

}

}

Address.java

importlombok.Data;

@Datapublic classAddress {privateString province;privateString city;privateString town;privateString village;

}

Phone.java

importlombok.Data;

@Datapublic classPhone {privateString operator;privateString phoneNumber;

}

People.java

importlombok.Data;importjava.util.List;

@Datapublic classPeople {privateString username;privateString password;privateString sex;privateAddress address;private Listphones;

}

controller类

importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.yyj.demo.pojo.Address;importcom.yyj.demo.pojo.People;importcom.yyj.demo.pojo.Phone;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Map;

@RestController

@RequestMapping("/people")public classPersonController {

@RequestMapping("getPeople")public MapgetPeople(@RequestBody People people){if(people == null){return null;

}

Map param = new HashMap();

String s=people.getPhones().toString();

System.out.println(s);

param.put("people",people);returnparam;

}

@RequestMapping("getOtherPeople")public Map getOtherPeople(@RequestBody Mapparams){if(params == null){

System.out.println("系统接收参数错误");return null;

}

Map map = new HashMap<>();

People people= newPeople();

people.setUsername(params.get("username").toString());

people.setPassword(params.get("password").toString());

people.setSex(params.get("sex").toString());

people.setAddress(JSON.parseObject(JSONObject.toJSONString(params.get("address")),Address.class));

people.setPhones((ArrayList) params.get("phones"));

map.put("people",people);returnmap;

}

}/*{

"username": "Tom",

"password": "123456",

"sex": "男",

"address": {

"province": "安徽",

"city": "芜湖",

"town": "天堑",

"village": "小岗村"

},

"phones": [{

"operator": "中国移动",

"phoneNumber": "12345678901"

},

{

"operator": "中国联通",

"phoneNumber": "09876543211"

}

]

}*/

3.postman测试结果:

对象接收方式:

bc02a4ac528adf32ba9e7224178b93c5.png

Map接收json数据

36a2e1183000d9d22a8608d55a5f868b.png

4.第二种方式需要添加alibaba的fastjson依赖

com.alibaba

fastjson

1.2.47

5.第二种实现方式遇到的各种坑:

使用@ResquestBody Map接收前端json数据,json数据中有数组,我们不能用String[]去接收这个数组,要用ArrayList去接收,原因如下:@RequsetBody会读取request的body数据,之后会调用MappingJackson2HttpMessageConverter解析数据,会使用到ObjectMapper,之后this.objectMapper.readValue(inputMessage.getBody(), javaType);javaType是AbstractJackson2HttpMessageConverter中getJavaType优选出来可以解析context的类型.

json数据中有对象数据存在时,我们不能单纯的去直接用这个对象接收这个数据,会报错的。报错内容:java.util.LinkedHashMap cannot be cast to ******我的具体做法如下:我们可以接收的hashmap转换为json,然后再次把这个json转换为对应的对象。(如有更好的办法,还望大佬在评论区告诉我一下)

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

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

相关文章

里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白

来源&#xff1a;雷锋网作者 | 付静1 代表着首次&#xff0c;标志着政府与企业持续合作前往国际空间站的开始。终于&#xff0c;美国太空探索技术公司&#xff08;SpaceX&#xff09;的首次正式载人飞行任务拉开大幕&#xff01;美东时间 2020 年 11 月 15 日 19 时 27 分&…

【树状数组】CF961E Tufurama

挺巧妙的数据结构题&#xff08;不过据说这是一种套路&#xff1f; E. Tufurama One day Polycarp decided to rewatch his absolute favourite episode of well-known TV series "Tufurama". He was pretty surprised when he got results only for season 7 episod…

取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史

在英文的输入状态下&#xff0c;把“ rand()”输入word后&#xff0c;按下回车键&#xff0c;就会突然跳出一页文字把“ rand()”输入excel后&#xff0c;按下回车键&#xff0c;则会得到这样的结果&#xff0c;0.134582最后再把“ rand()”输入PPT&#xff0c;按下回车键&…

一文看懂数字孪生,工信部权威白皮书

来源&#xff1a;智东西11月11日消息&#xff0c;《由商务部、科技部、工信部、国家发改委、农业农村部、国家知识产权局、中国科学院、中国工程院等部委和深圳市人民政府共同举办的中国国际高新技术成果交易会正式开幕。作为大会主会场的重要组成部分&#xff0c;由工信部下属…

linux -- control service and daemon process

linux -- control service and daemon process 一、几个重要概念的讲解 1、systemd 系统启动和服务器进程由 systemd 系统和服务管理器进行管理 此程序提供一种方式&#xff0c;可以在启动时和运行中的系统上激活系统资源、服务器守护进程和其他进程 2、守护进程 守护进程是在执…

java 网页正文抽取算法_网页正文抽取算法 ContentExtractor

软件介绍简介ContentExtractor 是一个开源的网页正文抽取工具&#xff0c;用JAVA实现&#xff0c;具有非常高的抽取精度。算法ContentExtractor的网页正文抽取算法使用的是CEPR&#xff0c;适用于几乎所有的包含正文的网页。 算法简介&#xff1a;项目地址转移项目已和WebColle…

基于人工智能智商研究的智能定律初探

什么是智能和意识一直是智能科学领域最基础也是最具有争议的问题&#xff0c;2014年以来&#xff0c;我们在对人机通用智能发展水平的进行研究时提出了标准智能模型&#xff0c;统一描述人和智能机器的特征。在这个研究的基础上&#xff0c;2020年5月我们在《Annals of Data》发…

Postman----Presets(预先设置)的使用

使用场景&#xff1a; 当我们在进行接口测试post请求时&#xff0c;headers是必填项&#xff0c;我们将一个A接口的headers编写后测试完成&#xff0c;再次进行B接口的测试&#xff0c;需重新编写headers&#xff0c;为了简单操作&#xff0c;我们就用到了Presets。 Presets 作…

opengl 如何加阴影_OpenGL + Qt: 3 - 旋转动画和键盘操纵

前三篇链接&#xff1a;OpenGL Qt: 0 - 三角形绘制 OpenGL Qt: 1 - 用下拉框选颜色 OpenGL Qt: 2 - 走向3D&#xff0c;画正四面体 这一周笔者经历了漫长的洲际飞行和昏天黑地的倒时差&#xff0c;所以本篇内容相对少一些&#xff0c;侧重 Qt 而不是 OpenGL。在上一篇中&…

mybatis java类注解式_Spring整合Mybatis注解方式

Spring整合Mybatis(注解方式)环境准备jar包&#xff1a;Spring所需依赖&#xff1a;spring-context、spring-aspects、aspectjrt、aspectjweaver、spring-tx、spring-jdbcmybatis所需要&#xff1a;mybatis、mybatis-spring、mysql-connector-java、(druid、c3p0、HikariCP)辅助…

2020十大新兴技术揭晓!每一项都可能颠覆我们的生活

转自丨科技日报作者丨张佳欣编辑丨翟丽影全世界都在竞相研发新冠肺炎疫苗&#xff0c;前景令人鼓舞&#xff0c;我们可能会在破纪录的时间内研发出疫苗。但在未来新冠疫情仍在蔓延的情况下&#xff0c;技术能帮助我们更快地实现目标吗?世界经济论坛和《科学美国人》杂志本月10…

c#_导出table功能

一&#xff1a;第一张导出方法&#xff0c;简单快捷 请注意&#xff1a;一般表格都有真分页&#xff0c;查询数据时候注意把分页条件去掉#region 此处是获取的list数组 然后转table再调用ExportExcel var list"你的list数据库源"DataTable dt new DataTable();dt.…

java 协议处理器_协议处理器urlstreamhandler及contenthandler

先看段打开网页的代码&#xff1a;URL urlnew URL("http://souljava.blog.163.com/");URLConnection connectionurl.openConnection();connection.getInputStream();问题1&#xff1a;客户端浏览器怎么判断接受到的是什么数据类型&#xff1f;回答&#xff1a;java的…

自己做一个小项目python_【Python】第一个微信小项目

一、微信好友数据分析功能介绍1.爬取好友列表,显示好友昵称、性别和地域和签名, 文件保存为 xlsx 格式2.统计好友的地域分布&#xff0c;并且做成词云和可视化展示在地图上3.获取所有好友的头像&#xff0c;合并成一张大图二、需要的库1、Pyecharts&#xff1a;一个用于生成ech…

RISC-V的自定义CPU悖论

来源&#xff1a;内容编译自「eejournal」&#xff0c;谢谢。随着这些年的发展&#xff0c;RISC-V的受重视程度与与日俱增。这主要因为它是免费的、灵活的&#xff0c;并且速度很快。这使RISC-V成为许多开发人员的安全便捷选择。但是您会认为RISC-V是通用RISC处理器还是定制的随…

java计算加速减速_Javascript加速运动与减速运动

加速运动&#xff0c;即一个物体运动时速度越来越快&#xff1b;减速运动&#xff0c;即一个物体运动时速度越来越慢。现在用Javascript来模拟这两个效果&#xff0c;原理就是用setInterval或setTimeout动态改变一个元素与另外一个元素的距离&#xff0c;如xxx.style.left或xxx…

python 运维包_基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?

常规导入:import module_name[,module1,...]from module_name import [*|child[,child1,...]from module_name import [*|child[,child1,...] as alias_name注意: 导入语句可出现在程序任意位置,自定义包要实现from module_name import *的效果则此模块必须在__init__.py实现__…

华为宣布出售荣耀,声明来了

来源&#xff1a;澎湃新闻综合华为官网、《深圳特区报》今天&#xff0c;华为发表声明&#xff0c;整体出售荣耀业务资产。对于交割后的荣耀&#xff0c;华为不占有任何股份&#xff0c;也不参与经营管理与决策。11月17日一早&#xff0c;荣耀最终的出售方案公布。多家企业在《…

Node.js教程-mysql模块

概述 在Node.js中&#xff0c;mysql模块是实现MySQL协议的JavaScript客户端工具。Node.js程序通过与MySQL建立链接&#xff0c;然后可对数据进行增、删、改、查等操作。 安装 由于mysql模块不是Node.js内置模块&#xff0c;需手动安装 npm i mysql注意&#xff1a;若MySQL服…

java 几种引用类型_Java 四种引用类型总结-Fun言

1. Java引用介绍Java从1.2版本开始引入了4种引用&#xff0c;这4种引用的级别由高到低依次为&#xff1a;强引用 > 软引用 > 弱引用 > 虚引用⑴ 强引用(Strong Reference)强引用是使用最普遍的引用&#xff0c;也是赋值的默认引用。如果一个对象具有强引用&…