类型转换可以将请求参数转换为指定的类型、指定的格式(数据的格式化),然后传给业务方法的参数。

Spring MVC内置了常用的类型转换器。如果内置的类型转换器满足不了需求,可以使用自定义的类型转换。

自定义类型转换有2种方式:

  • 使用Converter
  • 使用Formatter

Converter方式

(1)新建包com.chy.converter,包下新建类DateConverter,作为自定义的类型转换器

// 需要实现Converter接口,<原始类型,目标类型>
public class DateConverter implements Converter<String, Date> { //参数是请求参数中的原始数据,返回值是转换好的数据(目标类型)
@Override
public Date convert(String source) {
// 经过一些操作,将原始类型的数据,转换为目标类型的数据并返回
// ......
} }

(2)在spring mvc的配置中添加:

    <!--配置ConversionService-->
<bean name="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--使用集合传入自定义的converter-->
<property name="converters">
<set>
<!--一个bean对应一个类型转换器-->
<bean class="com.chy.com.chy.converter.DateConverter" />
</set>
</property>
</bean> <!--指定要使用的ConversionService-->
<mvc:annotation-driven conversion-service="conversionService" />

Formatter方式

(1)新建包com.chy.converter,包下新建类DateFormatter

// 需要实现Converter接口,<目标类型>
public class DateConverter implements Formatter<Date> {
//parse()是转换,将原始类型转换为目标类型,参数是原始类型(String)
@Override
public Date parse(String source, Locale locale) throws ParseException { } //print()是格式化输出,将目标类型转换为指定格式的字符串,参数是parse()转换好的目标类型
@Override
public String print(Date date, Locale locale) { }
}

Formatter的类型转换、数据格式化是分开的,写在2个方法里。

(2)在spring  mvc的配置中添加:

    <!--配置ConversionService-->
<bean name="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!--使用集合传入自定义的formatter-->
<property name="formatters">
<set>
<!--一个bean对应一个formatter-->
<bean class="com.chy.com.chy.converter.DateConverter" />
</set>
</property>
</bean> <!--指定要使用的ConversionService-->
<mvc:annotation-driven conversion-service="conversionService" />

踩过的坑:

xmlns:mvc="http://www.springframework.org/schema/cache"

IDEA自动导入的约束不对,将cache改为mvc,xsi中对应的部分也要改。

SpringMVC 自定义类型转换的更多相关文章

  1. SSM框架之SpringMVC(2)参数绑定及自定义类型转换

    SpringMVC(2)参数绑定及自定义类型转换 1.请求参数的绑定 1.1. 请求参数的绑定说明 1.1.1.绑定机制 表单提交的数据都是k=v格式的 username=haha&passw ...

  2. 05 SpringMVC:02.参数绑定及自定义类型转换&&04.SpringMVC返回值类型及响应数据类型&&05.文件上传&&06.异常处理及拦截器

    springMVC共三天 第一天: 01.SpringMVC概述及入门案例 02.参数绑定及自定义类型转换 03.SpringMVC常用注解 第二天: 04.SpringMVC返回值类型及响应数据类型 ...

  3. springmvc的类型转换

     一.springmvc的类型转换 (一)默认情况下,springmvc内置的类型转换器只能 将"yyyy/MM/dd"类型的字符串转换为Date类型的日期 情境一: 而现在我们无 ...

  4. 【.NET深呼吸】基础:自定义类型转换

    照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写.后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到.于是,老周接受了该朋友的建议 ...

  5. AutoMapper搬运工之自定义类型转换

    前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NE ...

  6. 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

    [源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...

  7. Struts2自定义类型转换,和处理类型转换错误

    Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...

  8. spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二)

    spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二) >>>>>>>>>>>>>>&g ...

  9. spring参数类型异常输出,SpringMvc参数类型转换错误输出

    spring参数类型异常输出, SpringMvc参数类型转换错误输出 >>>>>>>>>>>>>>>> ...

随机推荐

  1. java知识树

    https://blog.csdn.net/aitaozi11/article/details/79652943 (学习Java的9张思维导图) 文章目录 针对技术栈学习 1. java基础 1.1 ...

  2. 【代码学习】PYTHON迭代器

    一.迭代器 迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 二.可迭代对象 以直接作用于 ...

  3. pod的状态及操作

    查看pod的标签 [root@master pod]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS cv- ...

  4. 国密SM9算法C++实现(Linux)

    首先参考 Linux下编译并使用miracl密码库 该博文在linux下编译Miracl库. 编译完了,自然是要用的,下面介绍两种在C程序中使用miracl库的方法. 方法一: 1. 源码编译完后的必 ...

  5. 定时备份mysql数据库的shell脚本

    最近项目需要定时备份mysql数据库的数据,根据需求写了一份定时备份mysql数据库的脚本. -h mysql的地址  默认为localhost -P 端口号  默认为3306 -u 用户  默认为r ...

  6. RTT学习之PWM、ADC设备

    一 使用步骤: 查找 PWM 设备获取设备句柄.rt_device_find() 设置 PWM 周期和脉冲宽度.rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, ...

  7. java中4种常用线程池

    一.线程池 线程池:说白了,就是一种线程使用模式.线程过多会带来调度开销,进而影响整体性能.而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价 ...

  8. pycharm新建Django时,遇到的坑,安装index包失败

    https://blog.csdn.net/li93675/article/details/89418097 如果在pycharm中导入django包 ,只对当前项目有效,建议使用命令pip inst ...

  9. Spring 事务管理的API

    Spring事务管理有3个API,均为接口. (1)PlatformTransactionManager    平台事务管理器 常用的实现类: DataSourceTransactionManager ...

  10. WEB - Autoescaping, escaping, escape(转义)

    定义 参考Flask的文档http://flask.pocoo.org/docs/1.0/templating/#controlling-autoescaping 转义就是将> <这些在H ...