一、get请求前端传参和后台接收的写法:

1、ajax请求:

 $.ajax({                
     	url:'/user/login3',
        //contentType: 'application/json;charset=utf-8', //这一句添加与否,效果都一样
     	data:{"userName":"张三", "userPass":"123"},
     	method:'get',       
     	dataType:'json',                
     	success:function(res){    
     		if(res.successful == true || res.successful=='true'){      
     			alert("ok");   
     		}else{
     			alert("用户名或密码错误");            
     		}
     	},                
     	error:function (data) {
     		alert("用户名或密码错误");            
     	}            
     });

此时查看浏览器的network选项,会看到请求地址变成:

​ Request URL:http://localhost:8082/user/login3?userName=%E5%BC%A0%E4%B8%89&userPass=123

即请求参数拼接到url地址栏后,并且已经编码了。

2、针对这种请求,后台接收参数有三种写法:

1)、参数名称与前端key对应,不加任何注解:

@RequestMapping(value = "/login3", method = RequestMethod.GET)
	Map<String, Object> login4( String userName,  String userPass)

2)、参数名称与前端key对应,添加@RequestParam注解:

@RequestMapping(value = "/login3", method = RequestMethod.GET)
	Map<String, Object> login2(@RequestParam String userName, @RequestParam String userPass) 

3)、使用@RequestParam注解,将所有的参数封装到Map<String,Object>对象:

@RequestMapping(value = "/login3", method = RequestMethod.GET)
	Map<String, Object> login3(@RequestParam Map<String,Object> param)

此时,后台通过param.get(“userName”)来获取参数的值。@RequestParam注解换成@RequestBody注解无效,ajax请求报400错误,进入不了后台对应的方法。

二、post请求前端传参和后台接收的写法:

​ 3、ajax请求:

 $.ajax({                
     	url:'/user/login3',
     	data:{"userName":"张三", "userPass":"123"},
     	method:'post',       
     	dataType:'json',                
     	success:function(res){    
     		if(res.successful == true || res.successful=='true'){      
     			alert("ok");   
     		}else{
     			alert("用户名或密码错误");            
     		}
     	},                
     	error:function (data) {
     		alert("用户名或密码错误");            
     	}            
     });

4、针对3的ajax请求,后台的接口参数写法同2。

5、ajax请求:

$.ajax({                
     	url:'/user/login3',
     	contentType: 'application/json;charset=utf-8',
     	data:JSON.stringify({"userName":"张三", "userPass":"123"}),
     	method:'post',       
     	dataType:'json',   

不同的地方在于添加了contentType,data需要改成序列化的json字符串。

6、针对5这种ajax请求,2的三种写法后台都拿不到值,或者直接报400错误。需要用另外一种写法:

	@RequestMapping(value = "/login3", method = RequestMethod.POST)
	Map<String, Object> login3(@RequestBody Map<String,Object> param) {
		try {
			System.out.println("userName==" + param.get("userName") +", userPass==" + param.get("userPass"));

​ 这里的param名称可以随便取,可以用别的名称代替;Map<String,Object>也可以替换成自定义的POJO类名,比如自定了User类,包含了userName和userPass两个属性,则@RequestBody User user也可以去到前端传递的值,此时用user.getUserName()就可以了。

或者:

	@RequestMapping(value = "/login2", method = RequestMethod.POST)
	Map<String, Object> login2(@RequestBody String userInfo) {
		try {
			JSONObject json = JSONObject.parseObject(userInfo);
			System.out.println("userName==" + json.getString("userName") +", userPass==" + json.getString("userPass"));

这里的userInfo名称是随便取,可以用别的名称代替;把这里的@RequestBody替换成@RequestParam,会报400错误。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐