前端传递的json格式与SpringMVC接收实体类的对应关系
这篇文章主要是帮助刚刚入行的猿猿尽快适应Restful风格的搬砖生活
@RequestBody注解
基本介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
原理:请求由DispatcherServlet处理,找到相应的HandlerAdapter进行处理,RequestMappingHandlerAdapter会处理@RequestMapping注解的请求,设置一系列参数解析器进行解析,如果参数使用@RequestBody注解,则使用RequestResponseBodyMethodProcessor进行解析,此参数解析器用HttpMessageConverter将HttpMessage封装为具体的JavaBean对象,json格式的数据使用AbstractJackson2HttpMessageConverter进行解析,内部使用jackson进行json数据的解析;其实就是SpringMVC的执行过程
@RequestBody基本使用
@RequestBody原理
(1)当后端接收的是一个单独的实体类【这里不做过多解释,代码可以体会】
就是这种实体类,里面不包含实体类信息
package com.activiti.domain;
/**
* @author zhudunfeng
* @date 2020/8/20 22:20
*/
public class MyData {
private String isAgree;
public String getIsAgree() {
return isAgree;
}
public void setIsAgree(String isAgree) {
this.isAgree = isAgree;
}
@Override
public String toString() {
return "MyData{" +
"isAgree='" + isAgree + '\'' +
'}';
}
}
这种的Restful接口就是直接使用@RequestBody注解进行接收即可,我在这里就简单说一下@RequestBody注解,
Controller层方法
@PostMapping("/test/entity")
public void testEntity(@RequestBody MyData myData){
String isAgree = myData.getIsAgree();
Boolean aBoolean = Boolean.valueOf(isAgree);
System.out.println(isAgree);
}
postman测试

json
{
"isAgree":false
}
(2)当一个实体类包含另一个实体类
主实体类
package com.activiti.domain;
/**
* @author zhudunfeng
* @date 2020/8/20 22:20
*/
public class MyData {
private String isAgree;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getIsAgree() {
return isAgree;
}
public void setIsAgree(String isAgree) {
this.isAgree = isAgree;
}
@Override
public String toString() {
return "MyData{" +
"isAgree='" + isAgree + '\'' +
'}';
}
}
子实体类
package com.activiti.domain;
/**
* @author zhudunfeng
* @date 2020/8/21 17:30
*/
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
controller层
@PostMapping("/test/entity")
public void testEntity(@RequestBody MyData myData){
String isAgree = myData.getIsAgree();
Boolean aBoolean = Boolean.valueOf(isAgree);
System.out.println(isAgree);
System.out.println(myData.getUser().toString());
}
postman测试

json
{
"isAgree":false,
"user":{
"name":"adun",
"age":18
}
}
前端传递的json格式与SpringMVC接收实体类的对应关系的更多相关文章
- java后端无法接收到前端传递的json对象
java后端无法接收到前端传递的json对象 一·可能是因为未使用@RequestBody 在Controller层中,要么使用@RestController要么使用@Controller+@@Req ...
- 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收
利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...
- [转]C# JSON格式的字符串读取到类中
将JSON格式的字符串读取到类中 本例中建立JSON格式的字符串json,将其内容读取到Person类中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using Syste ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- SpringMVC通过实体类返回json格式的字符串,并在前端显示
一.除了搭建springmvc框架需要的jar包外,还需要这两个jar包 jackson-core-asl-1.9.2.jar和jackson-mapper-asl-1.9.2.jar 二.web,. ...
- SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析
两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...
- Spring MVC 后端获取前端提交的json格式字符串并直接转换成control方法对应的参数对象
场景: 在web应用开发中,spring mvc凭借出现的性能和良好的可扩展性,导致使用日渐增多,成为事实标准,在日常的开发过程中,有一个很常见的场景:即前端通过ajax提交方式,提交参数为一个jso ...
- ajax提交数据到java后台,并且返回json格式数据前台接收处理值
1.前台html页面.有一段代码如下: 账 户: <input type="text" name="userName" id="userN& ...
随机推荐
- C++11中std::move、std::forward、左右值引用、移动构造函数的测试
关于C++11新特性之std::move.std::forward.左右值引用网上资料已经很多了,我主要针对测试性能做一个测试,梳理一下这些逻辑,首先,左值比较熟悉,右值就是临时变量,意味着使用一次就 ...
- tcpdump 命令格式
tcpdump 命令格式 tcpdump [选项] [表达式 1. 选项 常用选项: -i : 网卡名: 指定网卡,默认抓取系统第一个网卡 -n : 对地址以数字方式显示 -nn :对地址端口以数字方 ...
- vue中实现后台管理路由标签页
<template> <section> <div class="navTabList el-tabs__nav-scroll" id="t ...
- redis设置密码和查询密码
编辑redis.windows.conf配置来启用认证. 1.初始化Redis密码: 在配置文件中有个参数: requirepass 这个就是配置redis访问密码的参数: 比如 requirepa ...
- 宝塔linux部署node项目
1.安装宝塔linux之后,按需配置,我的是nginx,不是apq的. 2.下载pm2管理器 3.添加站点,将node项目从localhost打包到到站点,node_modules这个无需打包,这个依 ...
- 熟悉ifos项目的记录吧
1.首页关联的:在 default-navigation-model.xml里 2.输入框改成下拉列框 第一步,找到需要修改的view的包,新建一个view obj 第二步,在query里写上需要找的 ...
- RXJAVA之聚合操作
concat 按顺序连接多个Observables.需要注意的是Observable.concat(a,b)等价于a.concatWith(b). startWith 在数据序列的开头增加一项数据.s ...
- Linux常用字段
cd 切换路径 vim,vi 打开文档 ls 查看文件信息 chmod 修改文件或目录的权限 useradd 添加用户 cat 查看纯文本文件(少内容) rm 删除文件或目录 mv 剪切文件或文件重 ...
- AngularJS 路由和模板实例及路由地址简化方法
最近一同事在学习AngularJS,在路由与模板的学习过程中遇到了一些问题,于是今天给她写了个例子,顺便分享出来给那些正在学习AngularJS的小伙伴们. 话说这AngularJs 开发项目非常的爽 ...
- spark textfile rdd 日记
批量处理模板方法, 核心处理方法为内部方法 def batchProces(sc: SparkContext, locationFlag: Int, minid: Int, maxid: Int, n ...