ssm(spring+springmvc+mybatis)发起ajax请求前后端数据交互问题与解决方案
Posted 坚持不懈的大白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssm(spring+springmvc+mybatis)发起ajax请求前后端数据交互问题与解决方案相关的知识,希望对你有一定的参考价值。
1. 发起无参ajax请求
这是最简单的ajax请求,如下:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="js/jquery-2.0.0.min.js"></script>
</head>
<body>
<script type="text/javascript">
$.ajax(
type:"get",
url:"/get2",
success:function (result)
console.log(result);
,error:function (e)
console.log(e);
);
</script>
</body>
</html>
后端:
运行结果:
现在如果我想从后端获取某一个自定义的对象或者一个List列表,这样还行吗?
看一下代码:
不行了,在idea控制台上出现如下警告信息:
[WARNING] Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.util.ArrayList]
在浏览器上报错如下:
看了以下那个警告信息,发现如下:
上面讲无法找到那个ArrayList的转换器,这个时候我们可以在pom.xml添加如下三个依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
我不知道为什么我加上上述三个依赖依旧报错,后来在spring-mvc.xml配置文件中加入如下代码就可以正常输出了。
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
运行结果:
2. 发起有参ajax请求
如下:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="js/jquery-2.0.0.min.js"></script>
</head>
<body>
<script type="text/javascript">
$.ajax(
type:"get",
url:"/get5",
data:'id':1,'name':'liuze','gender':'male',
success:function (result)
console.log(result);
,error:function (e)
console.log(e);
);
</script>
</body>
</html>
后端实现:
运行结果:
有的读者就要问了,如果后端的参数名称和前端的那个参数名称不一致,后端还可以接收到的前端发过来的数据吗?答案是不能,但是我们可以给后端的那个参数前加上一个注解@RequestParam,如下:
添加注解@RequestParam之后,
3. 发起有参且后端接收的是对象的ajax请求
就是这样的情况,比如现在我想在前端发送一个自定义的对象到后端,在后端把对象打印出来,怎样实现呢?
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="js/jquery-2.0.0.min.js"></script>
</head>
<body>
<script type="text/javascript">
$.ajax(
type:"post",
url:"/get6",
data:JSON.stringify('id':1,'name':'liuze','gender':'male'),
contentType:"application/json",
success:function (result)
console.log(result);
,error:function (e)
console.log(e);
);
</script>
</body>
</html>
因为这里传到后端的是一个对象,所以需要把它转换成JSON对象,这样在能让后端认识到。
后端:
这里需要注意的就是需要添加注解@RequestBody
运行结果如下:
以上是关于ssm(spring+springmvc+mybatis)发起ajax请求前后端数据交互问题与解决方案的主要内容,如果未能解决你的问题,请参考以下文章
后端SSM(Spring + SpringMVC + Mybatis)框架整合
SSM(Spring + Springmvc + Mybatis)框架面试题