SpringMVC —— @RequestParam接收ajax请求数据异常

1. 问题描述

使用$.ajax传json数据时,发现后端一直提示没有收到参数,最终通过修改contentType(发送数据类型)使得后端接收数据正常。

2.代码

后端代码:使用@RequestParam接收参数

@RequestMapping(value = "/login",method = RequestMethod.POST)
    public String login(@RequestParam(value = "account",required = false) String account,@RequestParam(value = "password",required = false) String password){
        //······
    }

JS代码:原ajax请求

$.ajax({
    type: "POST", 
    dataType: "json", //数据类型
    contentType: "application/json",
    url: "xxxxxxxxxxxx" , //请求地址
    data: {
         "account":"abcdefg",
         "password":"123456"
    },
    success: function (result) {
    console.log(result);   //打印服务端返回的数据(调试用)
    	if (result.resultCode == 200) {
      	   //TODO
   		};
    },
    error : function(res) {
    	console.log(res);   //打印服务端返回的数据(调试用)
    	alert("异常");                                        
    },
});

3.原因分析

  • @RequestParam
    用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
  • @RequestBody
    处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。
    – GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
    – POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

解决方法一:前端将ajax的contentType参数改为x-www-form-urlencoded
解决方法二:后端使用@RequestBody来获取参数

4.修改后结果(使用方法一)

修改前请求结果(返回400状态码):
在这里插入图片描述

修改后请求结果(返回200状态码):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值