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

这篇具有很好参考价值的文章主要介绍了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 测试结果

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

        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);
}
此时我们测试一下看看是什么结果:

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

控制台输出: 

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

报错原因:

[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 转换后的数据
     */
    @Override
    public 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 测试结果 

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

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

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

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 测试结果 

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

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

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

        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相关注解运用 —— 中篇文章来源地址https://www.toymoban.com/news/detail-496426.html

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

到了这里,关于Spring MVC获取参数和自定义参数类型转换器及编码过滤器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot复习:(59)自定义类型转换器

    一、自定义类型转换器: 二、将自定义类型转换器注册到Spring boot 三、请求测试:

    2024年02月10日
    浏览(36)
  • Spring boot之WEB 开发-静态资源访问--自定义转换器--处理JSON--内容协商

    在线文档: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-web-applications 1. 只要静态资源放在类路径下: /static 、/public 、/resources 、/META-INF/resources可以被直接访问- 对应文件WebProperties.java 2. 常见静态资源:JS、CSS 、图片(.jpg .png .gif .bmp .svg)、字体

    2024年02月09日
    浏览(47)
  • Spring MVC: 请求参数的获取

    在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调用相应的处理器 Controller 。那么,处理器 Controller 具体是如何实现获取请求参数的呢?

    2024年02月10日
    浏览(35)
  • Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)

    目录 1.获取参数 1.1获取单个参数 1.2获取多个参数 传参注意事项: 2.获取对象  3.后端参数重命名@RequestParam 4.获取JSON对象@RequestBody 5.从 URL 地址中获取参数 @PathVariable 6.上传文件 @RequestPart 7.获取Cookie/Session/Header 7.1 获取 Request 和 Response 对象 7.2 获取Cookie (1)Servlet 获取 Cooki

    2024年02月16日
    浏览(31)
  • 电源转换器类型

    1根据转换的形式分类,可分为: AC-AC(交流-交流)转换器:如交流电源变压器、变频器等。 AC-DC(交流-直流)转换器:整流器。 DC-DC(直流-直流)转换器。 DC-AC(直流-交流)转换器:逆变器。 2 根据转换的方法分类,可分为: 线性电源:使用工作在线性区的功率器件调整

    2024年02月08日
    浏览(43)
  • spring 自定义类型转换-ConverterRegistry

    一个应用工程里面,一遍会涉及到很多的模型转换,如DTO模型转DO模型,DO模型转DTO, 或者Request转DTO模型,总的来说,维护起来还是相对比较复杂。每涉及一个转换都需要重新写对应类的get或者set方法,并且这些方法散落在不同的模块里面,非常不方便管理。 下面介绍 转换器

    2024年02月11日
    浏览(28)
  • EasyExcel自定义字段对象转换器支持转换实体和集合实体

    1. 实现ObjectConverter 2. 使用 3. 测试 3.1 导出excel 手动添加一些数据 导出 写入 excel 转换成功 3.2 导入excel 将上面生成的 excel 文件导入 读取 excel 数据并转换成功

    2024年02月11日
    浏览(33)
  • 如何使用SpringBoot 自定义转换器

    😀前言 本篇博文是关于SpringBoot 自定义转换器的使用,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观

    2024年02月12日
    浏览(36)
  • 6. 结构体和自定义类型

    结构体:将相关的数据放置在一起 可以通过点操作符( . )访问内部元素 可以作为函数的输入参数或返回类型 一个简单的代码示例: 编译运行结果: 可以引入成员函数,更好地表示函数与数据的相关性 示例代码:

    2024年01月24日
    浏览(30)
  • Postman内置动态参数和自定义的动态参数以及断言方式

    解决方案:使用 动态参数:内置动态参数/自定义动态参数, 解决上述问题    {{$timestamp}}  生成当前时间的时间戳。    {{$randomInt}}  生成0-1000之间的随机数    {{$guid}}           生成速记GUID字符串    3.1.postman接口中设置自定义动态参数  3.2.接口中引用自定义的动态

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包