springmvc请求参数
请求参数:基本类型参数,POJO类型参数,数组类型参数,集合类型参数
@ResponseBody代表不进行页面跳转
一、基本类型参数请求
//获得基本类型参数//访问:http://localhost:8080/user/guick11?username=zhangsan&age=18 打印:zhangsan 18@RequestMapping(value = "/quick11")@ResponseBodypublic void savell(String username, int age) throws IOException {//int age 可换成string ageSystem.out.println(username);System.out.println(age);}收数据方式:URL 查询参数
例:GET http://localhost:8080/user/quick11?username=zhangsan&age=18
底层规则:SpringMVC 按同名匹配自动转型; int 若接不到会抛 NumberFormatException 。
返回:void → 浏览器 204 空白页,控制台打印两行。
区别:最原始、最常用,不需要任何注解。
二、“POJO 对象”整体参数
//POJO类型参数,利用user实现//访问:http://localhost:8080/user/quick12?username=lisi&age=20 方法返回void,页面可能没东西,但控制台会有@RequestMapping(value = "/quick12") // 注意原图少了字母 m@ResponseBodypublic void save12(User user) throws IOException {System.out.println(user);}收数据方式:还是查询参数,但字段名必须跟 User 属性一致。-需创建user.java项目
例:
GET http://localhost:8080/user/quick12?username=lisi&age=20
底层规则:SpringMVC 先 new 一个 User ,再调用 setUsername/setAge 完成封装。
返回:同上,void → 204 空白页。
区别:比 quick11 简洁,字段再多也只用一个形参;前端依旧用 ?key=value 形式发数据。
三、数组类型参数
//获得数组类型参数--不常用//访问:http://localhost:8080/user/quick13?strs=aaa&strs=bbb&strs=ccc@RequestMapping(value = "/quick13")@ResponseBodypublic void save13(String[] strs) throws IOException {System.out.println(Arrays.asList(strs));}区别:不常用,但在多选框/批量删除场景会碰到。
四、集合类型参数(包装对象 Vo)
1. 后端代码
//封装集合方式-需要在提交数据时做操作@RequestMapping(value = "/quick14")@ResponseBodypublic void save14(Vo vo) {System.out.println(vo.getUserList());}
}
2. 包装对象 Vo(必须包一层,不能直接写 List)
public class Vo {private List<User> userList; // 属性名必须叫 userList// getter/setter
}
3.创建jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>quick14 批量提交测试</title>
</head>
<body>
<h3>请填写两条用户信息(quick14 表单集合演示)</h3>
<form action="${pageContext.request.contextPath}/user/quick14" method="post"><!-- 第 0 个 User --><label>用户0 姓名:</label><input type="text" name="userList[0].username"/><label>年龄:</label><input type="text" name="userList[0].age"/><br/><!-- 第 1 个 User --><label>用户1 姓名:</label><input type="text" name="userList[1].username"/><label>年龄:</label><input type="text" name="userList[1].age"/><br/><button type="submit">提交</button>
</form>
</body>
</html>
控制台输出
quick14 收到:[User{username='zhangsan', age=18}, User{username='lisi', age=20}]
五、JSON 数组转 List(最现代、最常用)
1. 后端代码
/*** 接收 JSON 数组 → List<User>* 前端必须发 Content-Type: application/json*/@PostMapping("/quick15")public void save15(@RequestBody List<User> userList) {// 打断点看即可System.out.println(userList);}
}
2. 实体 User(省略构造/get/set)
public class User {private String username;private int age;// 自动生成 getter/setter 或 Lombok @Data
}
控制台输出
quick15 收到:[User{username='zhangsan', age=18}, User{username='lisi', age=20}]
六、静态访问资源的开放
静态资源 = 不需要经过 Controller 解析就能直接给浏览器的文件,例如 .js .css .png .jpg .ico .html .woff 等。
我们要告诉 SpringMVC:“这几类路径你别管,直接让浏览器下载。” 这就是“静态资源访问”配置。
springmvc
<!-- 1. 注解驱动:注册 HandlerMapping、HandlerAdapter、JSON 转换器等 -->
<mvc:annotation-driven/><!-- 2. 手工映射:指定目录 → 浏览器可直接下载 -->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/img/**" location="/img/"/><!-- 3. 兜底策略:如果 1、2 都没匹配到,就交给 Tomcat 的 DefaultServlet 去处理 -->
<mvc:default-servlet-handler/>
七、请求数据乱码问题
在 Java Web(含 SpringMVC)项目里,只要“字节”→“字符”转换时使用的编码不一致,就会出现乱码。在web.xml里面配置一下全局的filter

八、参数绑定注解@requestParam


@RequestMapping(value = "/quick16")@ResponseBodypublic void save16(@RequestParam(value = "name", required = false, defaultValue = "itcast") String username) throws IOException {System.out.println(username);}@RequestParam 把查询参数 name 绑定到方法形参 username :
输入name=张三 就等于username=张三,都可以输出结果
required = false :请求可以不带 name 参数,不会报错。
defaultValue = "itcast" :如果没带 name ,就自动给默认值 "itcast" 。
九、获取Restful风格的参数


// 访问路径:http://localhost:8080/user/quick17/zhangsan
@RequestMapping(value = "/quick17/{username}")
@ResponseBody
public void save17(@PathVariable(value = "username") String username) throws IOException {System.out.println(username);
}
1. @RequestMapping("/quick17/{username}")
把路径的一部分变成参数,用大括号 {} 占位。 {username}就是在占位
示例 URL: /user/quick17/zhangsan → 此时 zhangsan 就是 {username} 的值。
2. @PathVariable(value = "username") value的username和"/quick17/{username}必须名字一样
可以简写成
@PathVariable String username 。
作用
典型 RESTful 风格用法:把资源 ID 直接放在 URL 路径里,而不是 ?id=xxx 。
常见于详情页、删除、REST 接口:
/user/123 、 /order/2024001 、 /book/9787111234567 都采用这种写法。
十、自定义类型转换器
用得不多

1.定义转换器实现converter接口
public class DateConverter implements Converter<String, Date> {public Date convert(String dateStr) {// 将日期字符串转换成日期对象返回,也就是转成2018-6-18这种格式SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = format.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}return date;}}2.在springmvc中声明告诉spring
<!-- MVC 注解驱动,同时引用咱们自定义的 conversionService -->
<mvc:annotation-driven conversion-service="conversionService"/><!-- 声明转换器 -->
<bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><list><bean class="com.itheima.converter.DateConverter"/></list></property>
</bean>
想用自己的转换器,就必须把“自定义 conversionService”绑定到 MVC 驱动上
“先声明,再引用”——缺谁都不行。
十一、获得Servlet相关API

自动注入对象
十二、获取请求头数据

获取cookie类型数据
@RequestMapping(value = "/quick21")
@ResponseBody
public void save21(@CookieValue(value = "JSESSIONID") String jsessionId) throws IOException {System.out.println(jsessionId);
}
