SpringMVC:获取请求参数
Posted Lansonli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC:获取请求参数相关的知识,希望对你有一定的参考价值。
文章目录
获取请求参数
紧耦合方式(了解)
DispatcherServlet中的service方法直接将此次请求的request对象传递给调用的单元方法即可。同时在单元方法上声明形参HttpServletRequest来接收request实参即可。
解耦合方式(熟练)
DispatcherServlet在其service方法中将请求数据根据需求从request对象中获取出来后,将数据直接传递给对应的单元方法使用。同时在单元方法上直接声明对应的形参接收请求数据即可。在单元方法上声明形参来接收请求数据时,形参名必须和请求数据的键名一致,DispatcherServlet会将调用单元方法的形参名作为请求数据的键名获取请求数据,然后传递给单元方法。
package com.lanson.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
@RestController
public class TestDataController
/*紧耦合方式参数注入
* 使用传统的HttpServletRequest对象获取参数 javax.servlet
* */
@RequestMapping("/getParamByRequest.do")
public String getParam1(HttpServletRequest req, HttpServletResponse resp)
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username:"+username+" password:"+password);
return "getParamSuccess";
/*解耦合方式参数注入
* HttpServletRequest对象获取参数 通过SpringMVC框架功能,自动转换参数
* 处理单元参数列表中参数名必须和请求中的参数名一致
* 如不一致,可以通过@RequestParma注解进行转换
* */
@RequestMapping("/getParamByArgName.do")
public String getParam2(String username,@RequestParam("pwd") int password)
System.out.println("username:"+username+" password:"+password);
return "getParamSuccess";
一、POJO接收参数
1、form表单
<form action="getDataByPojo">
<p>姓名<input type="text" name="pname"></p>
<p>年龄<input type="text" name="page"></p>
<p>性别:
<input type="radio" name="gender" value="1" >男
<input type="radio" name="gender" value="0" >女
</p>
<p>爱好
<input type="checkbox" name="hobby" value="1"> 篮球
<input type="checkbox" name="hobby" value="2"> 足球
<input type="checkbox" name="hobby" value="3"> 羽毛球
</p>生日
<p>
<input type="text" name="birthdate">
</p>
<input type="submit">
</form>
2、controller处理单元
package com.lanson.controller;
import com.lanson.pojo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
@RestController
public class ReceiveDataController
/*
* 使用POJO接收参数时,注意事项
* 提交的参数名必须和POJO的属性名保持一致
* springmvc底层通过反射给参数列表的属性赋值
* 通过set方法设置属性值的,不是直接通过操作属性
* POJO的属性一定要有set方法,要不然就会接收失败
* */
@RequestMapping("/getDataByPojo")
public String getDataByPojo(Person p)
System.out.println(p);
return "success";
3、POJO实体类
package com.lanson.controller;
import com.lanson.pojo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
@RestController
public class ReceiveDataController
/*
* 使用POJO接收参数时,注意事项
* 提交的参数名必须和POJO的属性名保持一致
* springmvc底层通过反射给参数列表的属性赋值
* 通过set方法设置属性值的,不是直接通过操作属性
* POJO的属性一定要有set方法,要不然就会接收失败
* */
@RequestMapping("/getDataByPojo")
public String getDataByPojo(Person p)
System.out.println(p);
return "success";
4、POJO实体类
package com.lanson.pojo;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Arrays;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class Person implements Serializable
private String pname;
private String page;
private String gender;
private String[] hobby;
private String birthdate;
二、日期类型转换
方式1 : 注解方式(推荐该方式)
@DateTimeFormat(pattern = "yyyy-MM-dd") 可以用于方法参数列表和 类的属性上
方式2: 配置转换器
第一步定义转换器
package com.lanson.util;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class StringToDateConverter implements Converter<String, Date>
private SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date convert(String source)
Date date =null;
try
date = dateFormat.parse(source);
catch (ParseException e)
throw new RuntimeException("日期转换异常");
return date;
第二步springmvc.xml 中配置转换器
<!--数据转换工厂-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--配置类型转换器-->
<property name="converters">
<array>
<!--注入自定义转换器对象-->
<bean class="com.lanson.util.StringToDateConverter"></bean>
</array>
</property>
</bean>
<!--这里配置转换服务工厂-->
<mvc:annotation-driven conversion-service="conversionService"/>
三、List集合接收参数
1、实体类
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Person implements Serializable
private String pname;
private String page;
private String gender;
private String[] hobby;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthdate;
private List<Pet> pets;
2、controller
@RequestMapping("/getDataByPojo")
public String getDataByPojo(Person p)
System.out.println(p);
System.out.println(p.getPets());
return "success";
3、form表单
<form action="getDataByPojo">
<p>姓名<input type="text" name="pname"></p>
<p>年龄<input type="text" name="page"></p>
<p>性别:
<input type="radio" name="gender" value="1" >男
<input type="radio" name="gender" value="0" >女
</p>
<p>爱好
<input type="checkbox" name="hobby" value="1"> 篮球
<input type="checkbox" name="hobby" value="2"> 足球
<input type="checkbox" name="hobby" value="3"> 羽毛球
</p>生日
<p>
<input type="text" name="birthdate">
</p>
宠物:
<p>
宠物1: 名字:<input type="text" name="pets[0].petName" >类型:<input type="text" name="pets[0].petType">
</p>
<p>
宠物2: 名字:<input type="text" name="pets[1].petName" >类型:<input type="text" name="pets[1].petType">
</p>
<input type="submit">
</form>
四、Map集合接收参数
1、实体类
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Person implements Serializable
private String pname;
private String page;
private String gender;
private String[] hobby;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthdate;
private List<Pet> pets;
private Map<String,Pet> petMap;
2、form表单
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="getDataByPojo" method="post">
<p>姓名<input type="text" name="pname"></p>
<p>年龄<input type="text" name="page"></p>
<p>性别:
<input type="radio" name="gender" value="1" >男
<input type="radio" name="gender" value="0" >女
</p>
<p>爱好
<input type="checkbox" name="hobby" value="1"> 篮球
<input type="checkbox" name="hobby" value="2"> 足球
<input type="checkbox" name="hobby" value="3"> 羽毛球
</p>生日
<p>
<input type="text" name="birthdate">
</p>
宠物List:
<p>
宠物1: 名字:<input type="text" name="pets[0].petName" >类型:<input type="text" name="pets[0].petType">
</p>
<p>
宠物2: 名字:<input type="text" name="pets[1].petName" >类型:<input type="text" name="pets[1].petType">
</p>
宠物Map:
<p>
宠物1: 名字:<input type="text" name="petMap['a'].petName" >类型:<input type="text" name="petMap['a'].petType">
</p>
<p>
宠物2: 名字:<input type="text" name="petMap['b'].petName" >类型:<input type="text" name="petMap['b'].petType">
</p>
<input type="submit">
</form>
</body>
</html>
3、controller
@RequestMapping("/getDataByPojo")
public String getDataByPojo(Person p)
System.out.println(p);
return "success";
五、编码问题
1、GET乱码问题
2、POST乱码问题
web.xml中配置编码过滤器
<!--Spring 中提供的字符编码过滤器-->
<filter>
<filter-name>encFilter</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>encFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
以上是关于SpringMVC:获取请求参数的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC— “SpringMVC获取请求参数的方法”