【重温SSM框架系列】8 - SpringMVC获取请求数据
SpringMVC获取请求数据
- 1. 获取基本类型参数
- 2. 获取POJO类型参数
- 3. 获取数组类型参数
- 4. 处理请求数据乱码问题
- 5. RequestParam注解绑定参数
- 6. 获得Restful风格的参数
- 7. 自定义类型转换器
- 8. 文件上传
- 9. 多文件上传
大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.近期会重新温习一下SSM的相关知识,相应的博客会更新至专栏【SSM框架】中,欢迎大家关注!
SSM专栏:https://blog.csdn.net/weixin_43598687/category_11652306.html
1. 获取基本类型参数
// 获取基本类型参数 @RequestMapping("/data1") @ResponseBody public void data1(String username,String password){ System.out.println("username: " + username); System.out.println("password: " + password); }
控制台打印:
2. 获取POJO类型参数
Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。
// 获取POJO类型参数 @RequestMapping("/data2") @ResponseBody public void data2(User user){ System.out.println(user); }
3. 获取数组类型参数
Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。
// 获取数组类型参数 @RequestMapping("/data3") @ResponseBody public void data3(String[] strings){ for(String string:strings){ System.out.println(string); } }
4. 处理请求数据乱码问题
当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。
在web.xml 中配置如下过滤器:
<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>
5. RequestParam注解绑定参数
当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定。
// 通过RequestParam绑定参数 @RequestMapping("/data4") @ResponseBody public void data4(@RequestParam("name") String username, @RequestParam("pwd") String password){ System.out.println("username: " + username); System.out.println("password: " + password); }
注解@RequestParam还有如下参数可以使用:
- value:与请求参数名称
- required:此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错
- defaultValue:当没有指定请求参数时,则使用指定的默认值赋值
6. 获得Restful风格的参数
在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。
// 获取Restful风格的参数 @RequestMapping("/data5/{username}/{password}") @ResponseBody public void data5(@PathVariable("username") String username,@PathVariable("password") String password){ System.out.println("username: " + username); System.out.println("password: " + password); }
7. 自定义类型转换器
SpringMVC默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。
- 创建DateConverter类并实现Converter接口
注意Converter接口导包时,导org.springframework.core.convert.converter.Converter;
public class DateConverter implements Converter<String,Date> { @Override public Date convert(String str) { SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd"); try { Date date = format.parse(str); return date; } catch (ParseException e) { e.printStackTrace(); } return null; }}
- 配置自定义类型转换器
在spring-mvc.xml中声明自定义转换器
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.wang.converter.DateConverter"/> </list> </property> </bean>
并在注解驱动中引用
<mvc:annotation-driven conversion-service="conversionService"/>
- 测试
// 获取Date数据,并进行类型转换 @RequestMapping("/data6") @ResponseBody public void data6(Date date){ System.out.println("Date: " + date); }
8. 文件上传
导入ileupload和io依赖包
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
配置文件上传解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5242800"/> <property name="maxUploadSizePerFile" value="5242800"/> <property name="defaultEncoding" value="UTF-8"/> </bean>
创建fileUp.jsp
<html><head> <title>文件上传测试</title></head><body><form action="${pageContext.request.contextPath}/data7" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="file"><br> <input type="submit" value="提交"></form></body></html>
// 文件上传 @RequestMapping("/data7") @ResponseBody public void data7(@RequestParam("file") MultipartFile uploadFile) throws IOException { String originalFilename = uploadFile.getOriginalFilename(); uploadFile.transferTo(new File("D:\\upload\\" + originalFilename)); }
访问JSP,选择文件并提交
9. 多文件上传
<html><head> <title>文件上传测试</title></head><body><form action="${pageContext.request.contextPath}/data8" method="post" enctype="multipart/form-data"> 文件1:<input type="file" name="files"><br> 文件2:<input type="file" name="files"><br> 文件3:<input type="file" name="files"><br> <input type="submit" value="提交"></form></body></html>
// 多文件上传 @RequestMapping("/data8") @ResponseBody public void data8(@RequestParam("files") MultipartFile[] uploadFiles) throws IOException { for(MultipartFile uploadFile:uploadFiles){ String originalFilename = uploadFile.getOriginalFilename(); uploadFile.transferTo(new File("D:\\upload\\" + originalFilename)); } }
SSM专栏:https://blog.csdn.net/weixin_43598687/category_11652306.html