文章目录

  • 一、Spring支持的转换器
  • 二、自定义转换器的步骤
    • 第一步:实现Converter接口
    • 第二步:将Converter配置到ConverterService组件中
    • 第三步:将组件声明在annotation-driven标签中
  • 三、关于annotation-driven标签
  • 四、日期格式化

一、Spring支持的转换器

Spring定义了3种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactroyBean中:

  • Converter<S,T>:将S类型对象转为T类型对象。
  • ConverterFactory:将相同系列多个同质Converter封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number及Number子类(Integer、Long、Double等)对象)可使用该转换器工厂类。
  • GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换.

由于后两种形式并不常用,本文仅介绍第一种,实现Converter<S,T>接口的方法。

二、自定义转换器的步骤

ConverterService是一个接口,它有一个实现类Converter(转换器)进行工作。自定义转换器,步骤如下

  • ①先实现Converter接口,写一个自定义的类型转换器。
  • ②将Converter配置在ConverterService组件中。
  • ③将组件声明在annotation-driven标签中。

在页面添加一个快速添加的按钮

list.jsp

 <form action="${ctp }/quickadd"><input name="empinfo" value="empAdmin-admin@qq.com-1-101"/><input type="submit" value="快速添加" /></form>

点击发送/quickadd请求到handler处理器

 @RequestMapping("/quickadd")public String quickAdd(@RequestParam("empinfo") Employee employee) {System.out.println("封装:" + employee);employDao.save(employee);return "redirect:/emps";}

handler处理器中调用保存方法后发送/emps请求,进而返回list.jsp页面

第一步:实现Converter接口

页面提交的将要转换的字符串为:empAdmin-admin@qq.com-1-101

  • 自定的转换器实现的功能:将String类型转换为Employee对象。
/***  S:Source *  T:Target *      将String转换为Employee对象*   @guoqianliang*/
public class MyStringToEmployeeConverter implements Converter<String, Employee> {@AutowiredDepartmentDao dpartmentDao;@Overridepublic Employee convert(String source) {System.out.println("页面提交的将要转换的字符串:" + source);Employee employee = new Employee();if (source.contains("-")) {String[] split = source.split("-");employee.setLastName(split[0]);employee.setEmail(split[1]);employee.setGender(Integer.parseInt(split[2]));employee.setDepartment(dpartmentDao.getDepartment(Integer.parseInt(split[3])));}return employee;}
}

第二步:将Converter配置到ConverterService组件中

  • 将自定义的Converter实现类配置到ConverterService组件中。
 <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><!-- 添加自定义的类型转换器 --><property name="converters"><set><bean class="com.gql.component.MyStringToEmployeeConverter"></bean></set></property></bean>

后续为了与日期格式化兼容,通常使用下面的写法:

 <bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><!-- 添加自定义的类型转换器 --><property name="converters"><set><bean class="com.gql.component.MyStringToEmployeeConverter"></bean></set></property></bean>

第三步:将组件声明在annotation-driven标签中

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

自定义转换器设置完成,控制台输出:

页面提交的将要转换的字符串:empAdmin-admin@qq.com-1-101
封装:Employee [id=null, lastName=empAdmin, email=admin@qq.com, gender=1, department=Department [id=101, departmentName=D-AA]]

三、关于annotation-driven标签

  • <mvc:annotation-driven /"> 标签会自动注册RequestMappingHandlerMappingRequestMappingHandlerAdapterExceptionHandlerExceptionResolver三个bean。

  • 支持使用ConverterService实例对表单参数进行类型转换。

  • 支持使用@NumberFormat annotation@DateTimeFormart注解完成数据类型的格式化。

  • 支持使用@Valid注解对JavaBean实例进行JSR303校验。

  • 支持使用@RequestBody@ResponseBody注解。

四、日期格式化

对属性对象的输入和输出进行格式化,本质上还是类型转换的范畴。

Spring在格式化模块中定义了一个实现ConverterService接口的FormattingConversionService实现类,该实现类扩展了GenericConversionService,因此它即具有类型转换的功能,又具有格式化的功能。

  • FormattingConversionService拥有一个工厂类FormattingConversionServiceFactoryBean,后者用于在Spring上下文中构造前者。
  • FormattingConversionServiceFactoryBean内部已经注册了
    ①NumberFormatAnnotationFormatterFactory:支持对数字类型的属性使用@NumberFormat注解
    如:@NumberFormat(pattern="#,###,###")
    ②JodaDateTimeFormatAnnotationFormatterFactory:支持对日期类型的属性使用@DateTimeFormat注解
    如:@DateTimeFormat(pattern = “yyyy-MM-dd”)

另外,需要注意的是ConversionServiceFactoryBean所创建的ConversionService组件没有格式化器,使用时需要在SpringMVC配置中将其替换为FormattingConversionServiceFactoryBean组件。

SpringMVC框架 |自定义类型转换器与日期格式化相关推荐

  1. SpringMVC框架----SpringMVC的自定义类型转换器

    上一段我们介绍了请求参数的绑定 SpringMVC请求参数的绑定 在请求参数绑定的时候,有时候会遇到一些问题,如自定义类型转换器异常 1.自定义类型转换器演示异常 现在有一个页面,想给服务器提交数据, ...

  2. SpringMVC中自定义类型转换器

    2019独角兽企业重金招聘Python工程师标准>>> 1.首先自己写一个类型转换器,实现org.springframework.core.convert.converter.Con ...

  3. SpringMVC-应用(数据绑定-自定义类型转换器,数据的格式化,数据校验)

    一.提出问题 SpringMVC封装自定义类型对象的时候,JavaBean要和页面提交的数据一一绑定.下面要知道: 1)页面提交的数据都是字符串 2)JavaBean中的属性如:Integer age ...

  4. SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器

    目录 配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servl ...

  5. ​ SpringMVC表单请求参数的绑定,配置编码过滤器解决请求参数中文乱码问题,自定义类型转换器

    文章目录 ​ SpringMVC的参数绑定支持的数据类型 基本数据类型和字符串类型 JavaBean 包装类 Map类型 List类型 POST请求参数中文乱码的解决方法 自定义类型转换器(Date类 ...

  6. springmvc二十一:自定义类型转换器

    ConversionService:是一个接口; 它里面有一个Converter(转换器)进行工作 ①实现一个Converter接口,写一个自定义的类型转换器 ②Converter是Conversio ...

  7. Struts2下创建自定义类型转换器(表单中日期的处理)

    在表单提交中需要有日期的输入,默认的Struts2处理机制可能不能满足需求,需要自定义一下类型转换器.如: String----->java.util.Date:输入 java.util.Dat ...

  8. 自定义类型转换器代码编写

    package com.learn.utils;import org.springframework.core.convert.converter.Converter;import java.text ...

  9. 详解Spring MVC请求参数类型,解决中文乱码问题,自定义类型转换器,Spring MVC相关注解

    #SpringMVC SpringMVC请求 简单类型 简单类型包括:基本类型,基本类型的包装类型,字符串 编写Controller @RequestMapping("/param" ...

最新文章

  1. Codeforces Round #596 Div. 2 C ~E
  2. 什么是WebService??
  3. 130242014022 蓝宏铮 第2次实验
  4. SecureCRT SSH 语法高亮
  5. ASP.NET企业开发框架IsLine FrameWork系列之一--第一次的亲密接触
  6. IOT(5)---物联网系统框架介绍
  7. 《上市公司信息披露电子化规范》简介
  8. textbox控件输入内容后按下Enter键后执行button1的click方法
  9. JavaScript:继承详解
  10. matlab仿真整流电路设计,基于Matlab GUI的整流电路仿真设计[图]
  11. python中的value是什么意思_Python self[name]=value是什么意思?
  12. 【顺序栈】32 顺序栈ADT模板简单应用算法设计:火车调度
  13. 自动开机和自动关机设定方法(包括linux和windows)
  14. 圆弧的函数c语言,VC++中Arc函数画圆弧
  15. 计算机win7不断重启,win7系统电脑一开机就自动重启的解决方法
  16. 阿里云RDS-NAS-OSS
  17. UFO-ViT:没有Softmax的高性能线性视觉Transformer
  18. 5M1270ZT144A5N CPLD 980MC 6.2NS 144TQFP /5M1270ZT144C5N
  19. XMLElement,XMLDocument 用法
  20. IntelliJ IDEA 使用svn教程

热门文章

  1. android电视如何打开adb调试模式,分享解密某Android电视adb后门方法
  2. 你会爬虫吗,我来教你爬海关蜀黍
  3. 转发 2013年度电影100佳
  4. 从普通 Msconfig 启动选择转为选择性启动
  5. 从0到1 拿下C语言——绪论(计算机的组成、进制转换、算法表示、程序结构、C语言基本词汇)
  6. 腾讯微搭低代码自定义组件库体验
  7. 5月3日云栖精选夜读:乾隆会判阿尔法狗死刑吗 ——浅谈当前人工智能的技术进化...
  8. 射频卡机井灌溉控制器特点
  9. nginx下使用SSI
  10. Oracle数据导入遇到1658的报错