Spring MVC获取参数和自定义参数类型转换器及编码过滤器

目录

一、使用Servlet原生对象获取参数

1.1 控制器方法

1.2 测试结果

二、自定义参数类型转换器

2.1 编写类型转换器类

2.2 注册类型转换器对象 

2.3 测试结果 

三、编码过滤器

3.1 JSP表单

3.2 控制器方法

3.3 配置过滤器

3.4 测试结果 

往期专栏&文章相关导读 

1. Maven系列专栏文章

2. Mybatis系列专栏文章

3. Spring系列专栏文章 

4. Spring MVC系列专栏文章


一、使用Servlet原生对象获取参数

        SpringMVC也支持使用Servlet原生对象,在方法参数中定义HttpServletRequest 、HttpServletResponse 、 HttpSession 等类型的参数即可直接在方法中使用。

1.1 控制器方法

// 使用Servlet原生对象@RequestMapping("c1/param8")public void servletParam(HttpSession session,HttpServletRequest request, HttpServletResponse response){// 原生对象获取参数System.out.println(request.getParameter("name"));System.out.println(response.getCharacterEncoding());System.out.println(session.getId());}

        这个就是一个很经典的利用request内置对象获取参数了。请求之后在控制台打印参数和编码方式还有对应的sessionId。

访问路径:http://localhost:8080/c1/param8?name=LYL

1.2 测试结果

        OK,可以看得出来是已经成功把参数值和编码方式和sessionId给查询出来了

        一般情况下,在SpringMVC中都有对Servlet原生对象的方法的替代,推荐使SpringMVC的方式代替Servlet原生对象。

二、自定义参数类型转换器

前端传来的参数全部为字符串类型,SpringMVC使用自带的转换器将字符串参数转为需要的类型。如:

// 获取简单类型参数
@RequestMapping("/c1/param1")
public void simpleParam(String username,int age){System.out.println(username+" "+age);
}

但在某些情况下,无法将字符串转为需要的类型,如:

// 自定义转换日期格式字符串
@RequestMapping("c1/param9")
public void dataParam(Date birthday){
    System.out.println(birthday);
}
此时我们测试一下看看是什么结果:

控制台输出: 

报错原因:

[WARNING]Resolved[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2025-01-01'; nested exception is java.lang.IllegalArgumentException]
 具体意思就是:[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:未能将类型为“java.lang.String”的值转换为所需类型“java.util.Date”;嵌套异常为org.springfframework.core.covert.ConversionFailedException:无法将值“2025-01-01”从类型[java.lang.SString]转换为类型[java.util.Date];嵌套异常为java.lang.IllegalArgumentException]

2.1 编写类型转换器类

        由于日期数据有很多种格式,SpringMVC没办法把所有格式的字符串转换成日期类型。比如参数格式为 birthday=2025-01-01 时,SpringMVC就无法解析参数。此时需要自定义参数类型转换器。 首先得定义类型转换器类,实现Converter接口。写法如下:  

package com.example.converter;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DataConverter implements Converter<String, Date> {/*** 转换方法* @param s 转换前的数据* @return 转换后的数据*/@Overridepublic Date convert(String s) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");Date date = null;try{date = sdf.parse(s);} catch (ParseException e) {System.out.println("转换成日期格式出错了!");e.printStackTrace();}return date;}
}

2.2 注册类型转换器对象 

<!-- 配置转换器工厂 --><bean id="dateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean"><!-- 转换器集合 --><property name="converters"><set><!-- 自定义转换器 --><bean class="com.example.converter.DataConverter"></bean></set></property></bean><!-- 使用转换器工厂 --><mvc:annotation-driven conversion-service="dateConverter"></mvc:annotation-driven>

OK,加了上面这些我们再运行测试一遍看看控制能否成功接收 

2.3 测试结果 

 可以看到报的是404错误,没有找到这个页面,而不是400了

OK,控制台也成功打印出来了。 

三、编码过滤器

在传递参数时,tomcat8以上能处理get请求的中文乱码,但不能处理post请求的中文乱码

3.1 JSP表单

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>专属页面</title>
</head>
<body><form action="/c1/param3" method="post"><table><tr><th>id:</th><td><input name="id"/></td></tr><tr><th>姓名:</th><td><input name="name"/></td></tr><tr><th>性别:</th><td><input name="sex"/></td></tr><tr><th>住址:</th><td><input name="address.info"/></td></tr><tr><th>邮编:</th><td><input name="address.postcode"/></td></tr><tr align="center"><td><input type="submit"/></td></tr></table></form>
</body>
</html>

这里是一个表单提交的页面

3.2 控制器方法

控制器方法我就沿用了之前的,如下: 

    @RequestMapping("c1/param3")public void objParam2(Student student){System.out.println(student);}

3.3 配置过滤器

        SpringMVC提供了处理中文乱码的过滤器,在web.xml中配置该过滤器即可解决中文乱码问题:添加如下配置:

<!-- SpringMVC中提供的字符编码过滤器,放在所有过滤器的最上方 --><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>

3.4 测试结果 

        提交上述信息,看看控制台打印有没有乱码,如果没有乱码,则说明字符编码过滤器配置成功。 

        OK,说明确实是可以了,并且表单提交的name属性和Student属性对应的话,也是可以直接赋值给对应的参数的。

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章 

Spring系列专栏Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章

SpringMVC系列专栏Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2823.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES(elasticsearch)删除指定索引

场景 需要删除指定的索引 语法 执行命令 DELETE /索引名比如&#xff1a;DELETE /mysql-status_-2023.06 执行结果&#xff1a; 判断索引是否删除成功 执行命令 HEAD /索引名比如&#xff1a;HEAD /mysql-status_-2023.06 执行结果&#xff1a; 说明已经删除完毕 总结…

OpenCV——总结《车牌识别》之《常用的函数介绍》

1. cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))element cv2.getStructuringElement(shape, ksize[, anchor])用于创建形态学操作的结构元素&#xff08;structuring element&#xff09;。 参数解释&#xff1a; shape&#xff1a;结构元素的形状&#xff0c;可以…

如何查看 Facebook 公共主页的广告数量上限?

作为Facebook的资深人员&#xff0c;了解如何查看公共主页的广告数量上限对于有效管理和优化广告策略至关重要。本文将详细介绍如何轻松查看Facebook公共主页的广告数量上限&#xff0c;以帮助您更好地掌握广告投放策略。 一、什么是Facebook公共主页的广告数量上限&#xff1f…

基于 FPGA 的单脉冲技术:算法设计(附源码)

一、前言 本例显示了开发单脉冲技术的工作流程的前半部分&#xff0c;其中信号使用数字下变频&#xff08;DDC&#xff09;进行下变频。本例中的模型适合在FPGA上实现。本示例重点介绍单脉冲技术的设计&#xff0c;以估计物体的方位角和仰角。 示例的第二部分是基于FPGA的单脉冲…

如何设计一个文件系统?需要考虑哪些因素?

文件系统的实现 在对文件有了基本认识之后&#xff0c;现在是时候把目光转移到文件系统的实现上了。之前用户关心的一直都是文件是怎样命名的、可以进行哪些操作、目录树是什么&#xff0c;如何找到正确的文件路径等问题。而设计人员关心的是文件和目录是怎样存储的、磁盘空间…

信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复)信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网…

消防通道堵塞识别 opencv

消防通道堵塞识别系统通过opencvpython网络模型技术&#xff0c;消防通道堵塞识别对消防通道的状态进行实时监测&#xff0c;检测到消防通道被堵塞时&#xff0c;将自动发出警报提示相关人员及时采取措施。OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个…

SPI总线

目录 声明 1、 SPI简介 2、 SPI特点 2.1采用主-从模式(Master-Slave) 的控制方式 2.2采用同步方式(Synchronous)传输数据 2.3数据交换(Data Exchanges) 2.4 SPI有四种传输模式 2.5 SPI只有主模式和从模式之分。 3、 工作机制 3.1概述 3.2 Timing 声明 转自&#xf…

【资料分享】Xilinx Zynq-7010/7020工业核心板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)

1 核心板简介 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业核心板&#xff0c;处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源&#xff0c;通过工业级B2B连接器引出千兆网口、USB、CAN、UA…

抖音矩阵系统源代码开发部署--源码搭建

抖音seo矩阵系统文章目录技术囊括&#xff08;一&#xff09; 源代码开发配置文档 抖音SEO矩阵系统的主要架构如下源代码开发关键技术 源代码开发交付形式 短视频账号矩阵系统开发者必备能力语言&#xff1f; 概要 一、系统设计 1.需求分析 抖音SEO矩阵系统的主要功能是提…

string类学习

本篇将深入学习string类&#xff0c;通过各个测试函数玩遍cstring类&#xff0c;学到就是赚到&#xff01;&#xff01;&#xff01; 文章目录 1.头文件和源文件1.1源文件1.2头文件 2.构造函数3.赋值重载函数4.元素访问运算符5.迭代器5.1正向迭代器5.2反向迭代器 6.添加字符串…

2023年java还是golang还是c#?

前言 我们可以先来看一下这三门语言各自的优劣 学习曲线&#xff1a;如果你是初学者或对编程相对陌生&#xff0c;Java可能是一个较好的选择。它有广泛的学习资源和社区支持&#xff0c;易于上手。Go也有简单易学的特点&#xff0c;但由于相对较年轻&#xff0c;相关的学习资…