SpringMVC-请求和响应
SpringMVC的数据响应
springmvc的数据响应分为两种方式:
- 页面跳转
- 回写数据
页面跳转
1. 返回字符串形式
直接返回字符串:此方式会将返回的字符串和视图解析器的前后缀拼接然后跳转。
@RequestMapping("/success")
public String success(){
return "success";
}
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
若有上面的视图解析器配置,则转发的资源地址就是 /jsp/success.jsp
2. 返回ModelAndView对象
// 返回ModelAndView
@RequestMapping("/success2")
public ModelAndView print_test2(){
/**
* model 模型用来封装数据
* view 视图用来展示视图
*/
ModelAndView model_view = new ModelAndView();
// 设置模型数据(键值对)
model_view.addObject("name","sjj");
// 设置视图名称
model_view.setViewName("success");
return model_view;
}
此时我们可以将封装的数据显示在success.jsp中
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>测试</title>
</head>
<body>
<h1>成功 --- ${name}</h1>
</body>
</html>
这样访问 /success2
就能看见封装的数据了
当然你也可以将ModelAndView对象作为参数,SpringMVC会自动为你创建对象
// 返回ModelAndView2
@RequestMapping("/success3")
public ModelAndView print_test3(ModelAndView model_view){
// 设置模型数据(键值对)
model_view.addObject("name","sjj2");
// 设置视图名称
model_view.setViewName("success");
return model_view;
}
回写数据
1. 回写字符串
// 字符串回写
@ResponseBody // 告诉SpringMVC是回写数据而不是跳转页面
@RequestMapping("/success4")
public String writeFun(HttpServletResponse response) {
return "hello world";
}
当然,在实际的开发过程中我们回返回更有用的字符串如json格式的字符串
这时候我们可以导入jackson相应的包来辅助开发
2. 返回对象
准备一个实体User类
package com.sjj.domain;
import org.springframework.stereotype.Component;
@Component("user")
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
编写返回User对象的方法
@ResponseBody
@RequestMapping("/success5")
public User writeFun2(User user) {
user.setName("sjj");
user.setAge(19);
return user;
}
我们希望SpringMVC能自动帮我们把类转为json类型的字符串,因此需要在spring-mvc.xml中配置处理器映射器
先在pom.xml中导入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10</version>
</dependency>
然后编写处理器映射器
<!--处理器映射器-->
<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>
有更简洁的配置方式
<!--注解驱动-->
<mvc:annotation-driven />
SpringMVC的请求数据
众所周知客户端请求参数的格式是 name1=value1&name2=value2...
服务器要获得请求的参数,有时需要进行数据的封装,SpringMVC可以接收如下参数:
- 基本类型参数
- POJO类型参数
- 数组类型参数
获得基本类型参数
Controller中业务方法的参数名称要与请求参数的name一致,参数值回自动映射匹配
@ResponseBody
@RequestMapping("/success6")
public void printRequest(String name,int age) {
System.out.println(name);
System.out.println(age);
}
我们访问 http://localhost:8080/success6?name=sjj&age=19
会发现控制台返回了字符串sjj和整型19的基本类型数据
获得POJO类型参数
我们仍然是以上面的User类和访问的http://localhost:8080/success7?name=sjj&age=19
为例,只不过我们只需要把接收的参数改为User
@ResponseBody
@RequestMapping("/success7")
public void printRequest2(User user) {
System.out.println(user);
}
记得写toString方法更直观哦
获得数组类型参数
只要是name一致,数组也是可以接收的,比如这次我们访问 http://localhost:8080/success8?lis=1&lis=2&lis=3
@ResponseBody
@RequestMapping("/success8")
public void printRequest3(String[] lis ) {
System.out.println(Arrays.toString(lis));
}
获得集合类型参数
当使用ajax提交时,可以提交contentType为json格式,那么在方法参数位置使用RequestMapping可以直接接收请求数据而无需进行POJO封装
先在spring-mvc.xml中开启静态资源访问
<!--开放静态资源访问-->
<mvc:resources mapping="/js/**" location="/js/" />
<!--或者是交给原始容器来找静态资源-->
<mvc:default-servlet-handler />
例如我们有这样一个页面,访问时为 http://localhost:8080/jsp/ajax.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>ajax</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.2.1.min.js"></script>
<script>
const userList = [];
userList.push({name:"小A",age:18});
userList.push({name:"小B",age:19});
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/success10",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8"
})
</script>
</head>
<body>
</body>
</html>
对应的返回方法是
@ResponseBody
@RequestMapping("/success10")
public void printRequest5(@RequestBody List<User> userList) {
System.out.println(userList.toString());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南