AJAX data参数及后台接收注释 @RequestBody @RequestParam 的使用

本文介绍了AJAX数据传递的三种方式:json格式、json字符串格式和标准参数模式,并详细讨论了在Spring Boot中使用@RequestParam和@RequestBody注解的区别。@RequestParam用于处理application/x-www-form-urlencoded编码的内容,适合标准参数模式;而@RequestBody用于处理非默认编码格式的数据,通常需要设置contentType。文中还提及了请求头Content-Type的重要性以及AJAX发送json字符串时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AJAX data参数及后台接收注释 @RequestBody @RequestParam 的使用

在做一个功能修改时 需要往后台传一个ID参数,第一想法是直接接收一个ID 去数据库查询,因为在Controller中都用的@RequestBody 接收,接收的字符串类似“{id:“sadasfsaf56565”}”,又不想拆分,所以钻了一个牛角尖,想起原来学@RequestParam直接接收,经测试前台报400 找不到,最后为了先完成任务 用的老方法 一个对象接收了。今天上午上网查 总结一下。

首先 这是我用老方法后台接收的。

@RequestMapping(value = "/queryOrganization", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ResponseBody
		public String queryOwnAuthority(@RequestBody User user) 
			System.err.println(user.getId());

前端

// 获得一个勾选的集合  
		var select = $('#user_result_table').datagrid('getChecked');
		var data = {};
		data.id = select[0].id;
		var param = JSON.stringify(data);
---------------------分割线----------------------------
		$.ajax({
				type : "POST",
				url : "../user/queryOrganization",
				data : param,
				contentType : "application/json;charset=utf-8",
				dataType : "json",
				success : ........

首先 @RequestBody 与 @RequestParam 的区别。
(参考https://www.cnblogs.com/lxh520/p/8760664.html)

  • @RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form- urlencoded类型)
    @RequestParam可以接受简单类型的属性,也可以接受对象类型。
    实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。
  • @RequestBody处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。
    •GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
    •POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type

参数使用了解了 简单说就是@RequestBody 要ajax设置Content-Type 而且一般是非默认的,比如我们常用的ajax。
那么我又查了一下AJAX的data参数都是什么样的。可以说解决了一个坑,因为data类型必须是key-value 类型的。也就是说并不能只传一个id,所以报错。总结一下。
参考(https://www.cnblogs.com/yangguoe/p/8986108.html)

- ajax有三种传递传递data的方式:
json格式
json字符串格式
标准参数模式

1. json格式
{“username”:”chen”,”nickname”:”alien”}
2. json 字符串
“{“username”:”chen”,”nickname”:”alien”}” 或者JSON.stringify({“username”:”chen”,”nickname”:”alien”})
用此格式get请求参数传递不过去,不会把json串解析成参数 而且需要添加 contentType:”json/application”
3. 标准参数格式
“username=chen&nickname=alien”
$(“#form1”).serialize() 就是把表单的数据拼成这个格式的字符串

这下我们发现在前台传递json字符串时,因为必须设置请求头,所以后端一般也是@RequestBody注解接收。一般接收为自定义的类型 用String接收 接收接收整个字符串 而换成@RequestParam注解前台报了400错误。
而传递另两种类型时 推荐使用@RequestParam(“xxx”) 如果不写括号 会直接赋成参数对应key的value值。
另提一嘴@RequestMapping 中的produces = “application/json;charset=UTF-8” 属性是指定返回值类型 还有字符编码。只有ajax类型的话与@ResponseBody功能相同。相对应还有一个 consumes=“application/json” 属性 方法仅处理请求头为"application/json" 的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值