测试返回类型:
这里面的返回值是要跳转目的页面的名称
上图:会跳转到到success.jsp去,我们去获取:
${requestScope.user};
返回值类型是String的还可以进行关键字来跳转到其他页面:
小凤这个名字是不是很魔性,哈哈哈哈哈哈哈哈哈哈
先把依赖导入,因为我们要用json来传吗,要把对象和json互转
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</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-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
小白可能会问怎么转呢:以图为例
@RequestBody,POST的请求,把请求体中的数据封装到对象中,那要是get呢?参数就在地址栏中了
,这时,就通过一个注解@PathVariable
/**
* 参数占位符
* @param id
* @return
* http://localhost:8080/anno/testPathVariable/10
*/
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") int id) throws UnsupportedEncodingException {
System.out.println(id);
System.out.println("执行了");
return "success";
}
@ResponseBody:会把我们返回的list转换为josn格式传到前台
首先我先定义一个按钮,让其发生点击事件时就去发出post请求
<button id="btn">发送ajax请求</button>
<script src="js/jquery-3.2.1.min.js"></script>
来测试一下点击事件叭!!!
<script>
$(function () {
console.log("test........")
$("#btn").click(function () {
alert("test........");
});
})
</script>
但是点击并没有反应???
原来拦截器给拦截了
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我们在web.xml中 的设置<url-pattern>/</url-pattern>
会拦截除了.jsp的信息,所以我们要为静态资源css.js.img等放行
<!-- 通过mvc:resources设置静态资源,这样servlet就会处理这些静态资源,而不通过控制器
设置不过滤的内容,比如:css,js,img等资源文件
location指的是本地的真实路径,mapping指的是映射到的虚拟路径
-->
<!-- 放行静态资源-->
<mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
好了,现在开始进行ajax的请求了
这是我的Controller中的代码,一级目录是/user
这个是我的ajax的请求:
上面的两张图片是能够正确访问的呀
下面也是我遇到的一些问题:
问题一:不支持Media类型
HTTP Status 415 – Unsupported Media Type
有 错误提示:SpringMvc的Required String parameter ‘name’ is not present,name是我User中的一个属性,
这怎么会不存在呢,查看发现信息没有封装到User中
百度了,查看被人的博客发现:RequestBody不能映射到对象中
原来要导包啊!!!
<dependency>
<groupId>repository.com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.33</version>
</dependency>
在resources下的springmvc.xml中:
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
注意也要查看是不是类型有问题???
我觉得这句话也挺有用的:
大家一定要注意:这几个参数:
这个参数是告诉服务器,我传过去的是什么类型的
这两个是服务器端传过来的是什么类型
问题三:
会发现u不会转化为"name":"name","age":15,"password":"123"
这种格式,就会报错,如果有小伙伴知道为什么,告诉我哈!!!
看到状态码是200,真开心,嘻嘻!!!
下面就是常用到的一些情况
接受参数为Account类型,返回值是String类型
data:'{"user":{"name":"name", "password":"123", "age":13}}',
接受参数为Account类型,返回值是List集合
前端按照对集合的操作获取即可