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 分&…

取文字_把这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、守护进程 守护进程是在执…

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

什么是智能和意识一直是智能科学领域最基础也是最具有争议的问题&#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。在上一篇中&…

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

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

c#_导出table功能

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

RISC-V的自定义CPU悖论

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

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

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

边缘计算4.0正急速驶来,你做好准备了吗?

物联网智库 整理发布导 读近十年间&#xff0c;各行各业的企业都经历着数字化技术和产品对传统生产经营模式的冲击。人工智能、大数据、区块链、自动化等技术的日渐完善&#xff0c;让企业的生产效率和业务模式发生了翻天覆地的变化。

运维-替换-修改kibana徽标

作为一名纯运维人员&#xff0c;想更改kibana的徽标。 并不能像开发一样去看源码并修改源码。 所以我们可以替换徽标。 先来一个效果图。我的版本是5.5.1。 具体的修改过程&#xff1a; 在kibana安装路径下面。 optimize/bundles/ 0cebf3d61338c454670b1c5bdf5d6d8d.svg 这…

欧拉公式——真正的宇宙第一公式

来源&#xff1a;数学中国欧拉公式是数学里最令人着迷的公式之一&#xff0c;它将数学里最重要的几个常数联系到了一起&#xff1a;两个超越数&#xff1a;自然对数的底e&#xff0c;圆周率π&#xff1b;两个单位&#xff1a;虚数单位i和自然数的单位1&#xff0c;以及数学里常…

SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

我们这一一篇博客讲的是如何整合Springboot和Mybatis框架&#xff0c;然后使用generator自动生成mapper&#xff0c;pojo等文件。然后再使用阿里巴巴提供的开源连接池druid&#xff0c;这个连接池的好处我就不说了&#xff0c;集合了所有连接池的好处&#xff0c;并且还提供了监…

java实现qq抢红包_Java实现抢红包功用

用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里&#xff0c;然后用Job守时将红包信息推送给玩家。每一批玩家的抢红包恳求&#xff0c;其实操作的都是从行列中弹出的第一个红包元素&#xff0c;但当时的红包数量为空的时分&#xff0c;主动弹出下一个红包…

芯片里面100多亿个晶体管是如何安装上去的?

来源&#xff1a;金属加工如今随着芯片制程的不断提升&#xff0c;芯片中可以有100多亿个晶体管&#xff0c;如此之多的晶体管&#xff0c;究竟是如何安上去的呢&#xff1f;1当芯片被不停地放大&#xff0c;里面宛如一座巨大的城市。这是一个Top-down View 的SEM照片&#xff…

response.end后抛了异常_(七)异常处理

(七)异常处理异常异常的体系结构java.lang.Throwable|-----java.lang.Error&#xff1a;一般不便携针对性的代码进行处理|-----java.lang.Exception&#xff1a;可以进行异常的处理|-----编译时异常&#xff08;checked|-----IOException|-----FileNotFoundException|-----Clas…

AI+视频分析:实时监测无处不在的安全风险

来源丨Forbes作者丨Louis Columbus编译丨科技行者纵观2020年运营层面的诸多挑战&#xff0c;公共事业企业已经意识到对其所运营的物理及网络安全体系进行360度全方位审视的重要意义。最近&#xff0c;由Gartner发布的调查报告显示&#xff0c;94%的北美CIO认为&#xff0c;对偏…

python 绘图的背景颜色不要_matplotlib自定义添加 “哆啦A梦”背景图,这个操作真牛逼!...

为什么需要加星标&#xff1f;由于微信公众号出现了 “乱序” 排列的状况&#xff0c;也就是说&#xff1a;文章不会按照 “时间顺序” 推送给你。那么朋友们就不能第一时间&#xff0c;收到我的干货。因此希望您抽出一分钟&#xff0c;完成如下三步。数据分析与统计学之美原创…