当前位置: 代码网 > it编程>编程语言>Java > SpringMVC 通过ajax 前后端数据交互的实现方法

SpringMVC 通过ajax 前后端数据交互的实现方法

2025年04月28日 Java 我要评论
在前端的开发过程中,经常在html页面通过ajax进行前后端数据的交互,springmvc的controller进行数据的接收,但是有的时候后端会出现数据无法接收到的情况,这个是因为我们的参数和前端a

在前端的开发过程中,经常在html页面通过ajax进行前后端数据的交互,springmvc的controller进行数据的接收,但是有的时候后端会出现数据无法接收到的情况,这个是因为我们的参数和前端ajax的contenttype参数 类型不对应的情景,或者说contenttype和后台controller 方法参数到底存在什么样的关系

普通的参数我们传递的时候往往是这样的两种情况:

contenttype: "application/x-www-form-urlencoded",
contenttype: "application/json",

这样的两种方式有什么样的区别,

第一种方式:application/x-www-form-urlencoded 参数会解析为参数表,比如:

name=john+doe&age=30&city=new+york

 通过ajax 传递,ajax写法如下:

           	let params={
            	    "username":"张三",
            	    "password":"123456",
            	}
            	$.ajax({
            		url: "dologin4",
            		contenttype: "application/x-www-form-urlencoded",
            		headers: {  'authorization': "****",'access-control-allow-origin':'*'},
            		type: 'post',
            		data: params,
            		success: function(result) {
            			console.log(result)
            		},
            		error: function(data) {
            			console.log('接口不通');
            		}
            	});

这样的形式,后台接受的时候,使用:request.getparameter()@requestparam,比如:

@requestmapping("/dologin")
	public modelandview dologin(@requestparam string username,@requestparam string password) throws exception {
		system.out.println(username);
		system.out.println(password);
		modelandview mav = new modelandview();
		mav.addobject("info", "欢迎你");
		mav.setviewname("success");
		return mav;
	}
	@responsebody
	@requestmapping("/dologin2")
	public map<string,object> dologin2(httpservletrequest request,httpservletresponse response) throws exception {
		string username=request.getparameter("username");
		system.out.println(username);
		map<string,object> map=new hashmap<>();
		map.put("aa", "1111");
		return map;
	}

适合 x-www-form-urlencoded 的情况:

  • 传统html表单提交
  • 简单的键值对数据
  • 需要向后兼容老系统
  • 文件上传(结合multipart/form-data

第二种方式:contenttype: "application/json", 整个body作为单一数据流处理,比如:

{
  "name": "john doe",
  "age": 30,
  "city": "new york",
  "hobbies": ["reading", "swimming"]
}

通过ajax 传递,ajax写法如下:

           function dologin(){
            	let params={
            	    "username":"张三",
            	    "password":"123456",
            	}
            	$.ajax({
            		url: "dologin4",
            		contenttype: "application/json",
            		headers: {  'authorization': "****",'access-control-allow-origin':'*'},
            		type: 'post',
            		data: json.stringify(params),
            		success: function(result) {
            			console.log(result)
            		},
            		error: function(data) {
            			console.log('接口不通');
            		}
            	});
            }

java后台接受前台传入参数的代码如下:@requestbody

@responsebody
	@requestmapping("/dologin4")
	public map<string,object> dologin4(httpservletrequest request,httpservletresponse response) throws exception {
		string uu=request.getparameter("username");
		system.out.println(uu);
	    stringbuilder jsonbuilder = new stringbuilder();
	    try (bufferedreader reader = request.getreader()) {
	        string line;
	        while ((line = reader.readline()) != null) {
	            jsonbuilder.append(line);
	        }
	    }
	    string jsonstring = jsonbuilder.tostring();
	    objectmapper mapper = new objectmapper();
	    map<string, object> jsonmap = mapper.readvalue(jsonstring, map.class);  
	     string username = (string) jsonmap.get("username");
		system.out.println(username);
		map<string,object> map=new hashmap<>();
		map.put("aa", "1111");
		return map;   
	}
	@responsebody
	@requestmapping("/dologin3")
	public map<string,object> dologin3(@requestbody map<string,object> reqmap) throws exception {
		string username=reqmap.get("username").tostring();
		system.out.println(username);
		map<string,object> map=new hashmap<>();
		map.put("aa", "1111");
		return map;
	}

适合 application/json 的情况:

  • restful api通信
  • 复杂数据结构
  • 需要明确数据类型
  • 前后端分离架构
  • 移动应用与服务器通信

两种情景是不一样的,如果你前端传入的是json格式,那么后端你用:

   string uu=request.getparameter("username");
    system.out.println(uu);

这样是无法接收到数据的,接收到的参数一直为null,因为json是整体作为一个流传入到后台的

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com