这里说的是获取浏览器请求过来的参数的意思


总代码参考上一篇(有改动):
https://blog.csdn.net/GLOAL_COOK/article/details/112801651
QuickController :
package cn.itcast.controller;
import cn.itcast.domain.User;
import cn.itcast.domain.VO;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/17 21:10
*/
@Controller
@RequestMapping("/user") //一级访问目录
public class QuickController {
//下面演示获取请求数据--之获得基本类型参数
@RequestMapping(value = "/quick11",produces = "application/json;charset=utf-8")
@ResponseBody
public void save11(String username,int age) throws Exception {
System.out.println(username);
System.out.println(age);
}
//下面演示获取请求数据--之获得POJO类型参数
@RequestMapping(value = "/quick12",produces = "application/json;charset=utf-8")
@ResponseBody
public void save12(User user) throws Exception {
System.out.println(user);
}
//下面演示获取请求数据--之数组
@RequestMapping(value = "/quick13",produces = "application/json;charset=utf-8")
@ResponseBody
public void save13(String[] strs) throws Exception {
System.out.println(Arrays.asList(strs));
}
//下面演示获取请求数据--之集合有对象,用表单提交
@RequestMapping(value = "/quick14",produces = "application/json;charset=utf-8")
@ResponseBody
public void save14(VO vo) throws Exception {
System.out.println(vo);
}
//下面演示获取请求数据--之集合有对象,用ajax提交
@RequestMapping(value = "/quick15",produces = "application/json;charset=utf-8")
@ResponseBody
public void save15(@RequestBody List<User> userList) throws Exception {
System.out.println(userList);
}
//下面演示获取请求数据--请求参数可以和形参不一样
@RequestMapping(value = "/quick16",produces = "application/json;charset=utf-8")
@ResponseBody
public void save16(@RequestParam(value = "name11",required = false,defaultValue = "李云龙")String username) throws Exception {
System.out.println(username);
}
//下面演示获取请求数据--restful
// localhost:8080/user/quick17/zhangsan17
@RequestMapping(value = "/quick17/{name}",produces = "application/json;charset=utf-8")
@ResponseBody
public void save17(@PathVariable(value = "name") String username) throws Exception {
System.out.println(username);
}
//下面演示获取请求数据--自定义类型转换器
@RequestMapping(value = "/quick18",produces = "application/json;charset=utf-8")
@ResponseBody
public void save18(Date date) throws Exception {
System.out.println(date);
}
//下面演示获取请求数据--servlet的api
@RequestMapping(value = "/quick19",produces = "application/json;charset=utf-8")
@ResponseBody
public void save19(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws Exception {
System.out.println("req:"+request);
System.out.println("resp:"+response);
System.out.println("session:"+session);
}
//下面演示获取请求数据--请求头
@RequestMapping(value = "/quick20",produces = "application/json;charset=utf-8")
@ResponseBody
public void save20(@RequestHeader(value = "User-Agent") String user_agent) throws Exception {
System.out.println(user_agent);
}
//下面演示获取请求数据--cookie头
@RequestMapping(value = "/quick21",produces = "application/json;charset=utf-8")
@ResponseBody
public void save21(@CookieValue(value = "JSESSIONID") String jsessionion) throws Exception {
System.out.println(jsessionion);
}
}
1 获得基本类型参数

代码见quick11:
输入http://localhost:8080/user/quick11?username=%22wuli%22&age=11

2.获得POJO类型参数

User类:
package cn.itcast.domain;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/19 10:09
*/
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;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
上面代码quick12:浏览器输入
http://localhost:8080/user/quick12?name=“zhangsan”&age=10
控制台输出:

3 获得数组类型参数

代码见quick13:
浏览器输入http://localhost:8080/user/quick13?strs=”aaa”&strs=“bbb”&strs=“ccc”
控制台输出:

4.1获得集合类型参数(集合有对象-表单提交)

新建domain包里面VO集合类(里面含User对象):
package cn.itcast.domain;
import java.util.List;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/19 21:49
*/
public class VO {
private List<User> userList;
@Override
public String toString() {
return "VO{" +
"userList=" + userList +
'}';
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
}
在webapp直接建一个form.jsp表单提交:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head>
<title>获取集合演示</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick14" method="post">
<%--需表明是第几个User对象的name age--%>
<%--name属性需写你的VO类的属性名,.后写你的User类的属性名--%>
<input type="text" name="userList[0].name"><br>
<input type="text" name="userList[0].age"><br>
<input type="text" name="userList[1].name"><br>
<input type="text" name="userList[1].age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
重点jsp经常乱码啥的记得加:
<%@page isELIgnored=“false”%>
quick14:
浏览器访问:http://localhost:8080/form.jsp
提交中文会乱码,等下加个过滤器就行:

正确的控制台输出:
-------------------------------------------------------------------------------
4.2获得集合类型参数(集合有对象-ajax提交)
刚刚是通过form表单提交,下面通过Ajax提交:

就可以不用VO类了,但有时候你要根据前端的需要封装类的集合和一些其他属性的话,那么就要使用VO(随便起名)了,因为你一个List<类>,这个类还不包括你前端还需要的一些属性
在web添加js/jquery-3.3.1.js文件进去
在webapp新建ajax.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head>
<title>获取集合演示-ajax提交</title>
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
<script>
var userList=new Array();
// 下面的name要和你User对象的属性名一样
userList.push({name:"wugang",age:10});
userList.push({name:"lisi2",age:10});
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/user/quick15",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8"
});
</script>
</head>
<body>
</body>
</html>
直接在ajs.jsp加载js/jquery-3.3.1.js会找不到:

得在springmvc-xml配置开发资源的访问:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--context:include-filter代表只扫cn.itcast的org.springframework.stereotype.Controller的注解-->
<context:component-scan base-package="cn.itcast">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>
<!--配置内部资源视图解析器,viewResolver是随便起的id-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--简化/view/test1.jsp-->
<property name="prefix" value="/view/"></property> <!--改前缀,view是你项目webapp下的一个目录,可以改为其他的目录-->
<property name="suffix" value=".jsp"></property> <!--改后缀-->
</bean>
<!--mvc的注解驱动,必须加,不然回写对象和集合会很麻烦-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--开发资源的访问-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>
代码见quick15:
浏览器输入:http://localhost:8080/ajax.jsp
控制台会输出ajax.jsp里面给它的内容:

4.的集合返回中文都会乱码:下面来解决:
5.请求数据乱码问题

在web.xml配置过滤器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!--配置全局过滤的filter-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置SpringMVC的前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--contextConfigLocation是随便起的-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.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>
<!--全局初始化参数,contextConfigLocation是随便起的-->
<!--<context-param>-->
<!--<param-name>contextConfigLocation</param-name>-->
<!--<param-value>classpath:applicationContext.xml</param-value>-->
<!--</context-param>-->
<!--配置监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
</listener>
</web-app>
第四点就可以提交中文也不会出错了。


6.参数绑定注解@requestParam


quick16:
浏览器输入:http://localhost:8080/user/quick16?name11=‘’zhangsan16‘’
控制台输出:

7.Restful
了解即可:

quick17:
浏览器输入:(这里直接用/而不是用?了):
http://localhost:8080/user/quick17/zhangsan17
控制台输出:

8.自定义类型转换器(对日期有用)
1.新建一个DateConverter的java类:
package cn.itcast.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/20 10:11
*/
public class DateConverter implements Converter<String,Date>{
public Date convert(String dateStr) {
//将日期字符串转换成日期对象 返回
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
Date date=null;
try {
date=format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}

springmvc.xml改:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--context:include-filter代表只扫cn.itcast的org.springframework.stereotype.Controller的注解-->
<context:component-scan base-package="cn.itcast">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>
<!--配置内部资源视图解析器,viewResolver是随便起的id-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--简化/view/test1.jsp-->
<property name="prefix" value="/view/"></property> <!--改前缀,view是你项目webapp下的一个目录,可以改为其他的目录-->
<property name="suffix" value=".jsp"></property> <!--改后缀-->
</bean>
<!--mvc的注解驱动,必须加,不然回写对象和集合会很麻烦-->
<mvc:annotation-driven conversion-service="conversionService1"></mvc:annotation-driven>
<!--开发资源的访问-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!--声明转换器-->
<bean id="conversionService1" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="cn.itcast.converter.DateConverter"></bean>
</list>
</property>
</bean>
</beans>
quick18:
浏览器输入:
http://localhost:8080/user/quick18?date=2020-10-12(记得加date,若你输入的是/分割的日期则不用加自定义的转换器)
控制台输出:

8. 获得Servlet相关API(@RequestHeader、)
quick19:
浏览器输入:http://localhost:8080/user/quick19
控制台输出:
quick20:
浏览器输入:http://localhost:8080/user/quick20
控制台输出:


quick21:
浏览器输入:http://localhost:8080/user/quick21
控制台输出:

这篇博客详细介绍了如何在SpringMVC中处理各种类型的请求数据,包括基本类型、POJO、数组、集合(表单和Ajax提交),并解决了请求数据乱码的问题。此外,还涉及了@RequestBody、@RequestParam、Restful风格的URL以及自定义类型转换器的使用。示例代码丰富,涵盖了从表单提交到Ajax请求的全面示例。
1145

被折叠的 条评论
为什么被折叠?



