在使用ajax发送请求时,如果发送的JSON数据是一个类中的不同属性,在Controller方法中使用@RequestBody会直接封装进该类中

例如:

前端部分代码

JavaScript

 <script language="JavaScript">
function login(){
var user_name = $("#user_name").val(); //用户名
var user_password = $("#user_password").val; //用户密码 $.ajax({
url:"<%=path%>/User/Login",
type:"POST",
async: false,
contentType:"application/json;charset=UTF-8",
dataType:'json',
data:JSON.stringify({"user_name":user_name,"user_password":user_password}), //将JSON对象转为字符串
success:function(data){ }
});
}
</script>

form表单

 <form>
<div class="form-group">
<label for="user_name" stype="display:inline;">用户名:</label>
<input id="user_name" type="text" class="form-control" style="display:inline;" autocomplete="off" />
</div>
<div class="form-group">
<label for="user_password" style="display:inline;">用户密码:</label>
<input id="user_password" type="text" class="form-control" style="display:inline;" autocomplete="off" />
</div>
<div class="col">
<div class="col-md-4" style="text-align: right;">
<button type="submit" class="btn btn-success" onclick="login()">登录</button>
</div>
</div>
</form>

此时前端向后端传入JSON数据

User类部分代码

 public class User implements Serializable {
private Integer user_name; //用户名
private String user_password; //用户密码
......
}

Controller部分代码

 @Controller
@RequestMapping("/User")
public class UserController { @RequestMapping(value = "/Login",method = {RequestMethod.POST})
public @ResponseBody Boolean Login(@RequestBody User user) {
//此时user.getUser_name()就是前端的user_name
//user.getUser_password()就是前端的user_password
//根据输入的用户名及用户密码和数据库对比判断是否登录成功,并返回一个布尔值告诉前端
······
return true/false;
}

如果此时ajax提交的JSON数据为

 data:JSON.stringify({"user_name":admin,"user_password":123)

在Controller内加入输出语句

 public @ResponseBody Boolean Login(@RequestBody User user) {
System.out.println(user.getUser_name());
System.out.println(user.getUser_password());
······
return true/false;
}

输出的结果为

 admin
123

但是,如果我们需要同时接收多个参数,但这些参数并不是同一个类的不同属性,应该如何处理呢?

例如:

form表单中增加了一项验证码:verifycode。此时,假如ajax提交的JSON数据为

 data:JSON.stringify({"user_name":admin,"user_password":123,"verifycode":666})

但是verifycode并不是User类中的属性,不能由@RequestBody User user接收

如果采用String接收,输出的将是JSON字符串

 @RequestMapping(value = "/Login",method = {RequestMethod.POST})
public @ResponseBody Boolean Login(@RequestBody String body) {
//此时body是整个请求体的内容
System.out.println(body);
//······
}

输出的结果为

 {"user_name":admin,"user_password":123,"verifycode":666}

但我们想拿到每个参数的对应值,此时可以采用Map<String,String>接收

 @RequestMapping(value = "/Login",method = {RequestMethod.POST})
public @ResponseBody Boolean Login(@RequestBody Map<String,String> map) {
//此时map.get("user_name")就是前端的user_name
System.out.println(map.get("user_name"));
//map.get("user_password")就是前端的user_password
System.out.println(map.get("user_password"));
//map.get("verifycode")就是前端的verifycode
System.out.println(map.get("verifycode"));
······
}

输出的结果为

 admin
123
666

SpringMVC中@RequestBody接收前端传来的多个参数的更多相关文章

  1. SpringMVC中控制器接收JSP页面表单的参数接收方式详解及细节注意(400错误)

    控制器方法中参数的接收 (1)以前的参数接收: String  param = req.getParameter(name): (2)SpringMVC简化这个操作,只需要给控制器方法添加参数即可 a ...

  2. SpringMVC过程中@RequestBody接收Json的问题 总是报415

    在SpringMVC中用@RequestBody接收Json的问题,总是报415,经过一翻查找 前台js的post: var postdata = '{"title":" ...

  3. Ajax json交互和SpringMVC中@RequestBody

    Ajax json交互和SpringMVC中@RequestBody 标签: 背景 自己提供出去得接口中参数设置为@RequestBody VipPromotionLog vipPromotionLo ...

  4. 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象

    背景: 最近项目中使用SpringMVC,需要从前端接收JSON格式的请求,在后端自动转成一个与JSON格式相同的对象. 由于是一个老项目,Spring的版本是3.2.7. 问题1:POST or G ...

  5. Java如何接收前端传来的多层嵌套的复杂json串

    想看问题直接解决方式,直接拉到博文底部. Spring的controller在接收前端传参的时候如果参数使用@RequestBody标注的时候 @RequestBody 则会把前端参数转为JSON的形 ...

  6. 【Spring学习笔记-MVC-6】SpringMVC 之@RequestBody 接收Json数组对象

    作者:ssslinppp       1. 摘要 程序流程: 前台使用ajax技术,传递json字符串到后台: 后台使用Spring MVC注解@RequestBody 接受前台传递的json字符串, ...

  7. SpringMVC 之@RequestBody 接收Json数组对象

    1. 摘要 程序流程: 前台使用ajax技术,传递json字符串到后台: 后台使用Spring MVC注解@RequestBody 接受前台传递的json字符串,并返回新的json字符串到前台: 前台 ...

  8. SpringMVC中@RequestBody引起的400异常处理,返回校验失败具体信息

    问题 使用@RequestBody接收一个json数据的时候,如果传入的参数不符合条件,就会直接返回400的error page. 但究竟是为什么会400并没有抛出来.这对大量参数字段的我们来说,排错 ...

  9. SpringMVC的控制器接收前端数据的方式

    1.请求处理方法中可以出现以下几种参数类型,直接在controller方法形参上定义默认类型的对象,就可以使用这些对象.可以通过下列对象来获取前台传来的参数: ①HttpServletRequest对 ...

随机推荐

  1. Excel只想显示一部分日期,怎样把其余部分隐藏起来?

      问题:只想显示一部分日期,怎样把其余部分隐藏起来? 方法:分列 Step1:选中需要修改的单元格——数据——分列. Step2:固定宽度——点击下一步. Step3:在建立分列处单击鼠标(若想取消 ...

  2. mysql字符串类型(set类型)

    集合 set  不定想项选 类似于 enum枚举,在定义时,也需要指定其已有值! 与字符串相比,优势是: 1, 也是采用 整数进行管理的!采用位运算,从第一位开始为1,逐一x2! 2, 每个集合类型8 ...

  3. 阿里云用smtp无法发送邮件

    无法发送邮件是因为什么网络协议的要求必须要封掉25端口,而这个解封的话弄了很长时间也没有弄开,所以就换了别的方法 这个的话我这块用的是PHPMailer 然后我把这个PHPMailer的配置文件里的 ...

  4. cb41a_c++_STL_算法_填充新值fill_generate

    cb41a_c++_STL_算法_填充新值fill_generatefill(b,e,v)fill_n(b,n,v),填充n个vgenerate(b,e,p)generate_n(b,n,p) gen ...

  5. 多语言工作者の十日冲刺<10/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第十天(05.09) 作业正文 ...

  6. ViewPager2 学习

    ViewPager2 延迟加载数据 ViewPager2 延迟加载数据 ViewPager 实现预加载的方案 ViewPager2 实现预加载的方案 总结 ViewPager 实现预加载的方案 背景 ...

  7. Java CRC16 MODBUS校验算法实现

    /** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...

  8. Spring中的AOP(一)

    1. Spring AOP实现机制 Spring采用动态代理机制和字节码生成技术实现AOP.与最初的AspectJ采用编译器将横切逻辑织入目标对象不同,动态代理机制和字节码生成都是在运行期间为目标对象 ...

  9. python0.1

    python基础 python是一种高级编程语言,而编程语言分为3种 编程语言 编程语言是一种人与计算机沟通的工具. 编程就是就将人的需求通过攥写编程语言命令计算机完成指令. 编程的意义在于将人类的生 ...

  10. 网络虚拟化之linux虚拟网络基础

    1 linux虚拟网络基础 1.1 Device 在linux里面devic(设备)与传统网络概念里的物理设备(如交换机.路由器)不同,Linux所说的设备,其背后指的是一个类似于数据结构.内核模块或 ...