Converter

  • 在Spring MVC框架中需要收集用户请求参数,并将请求参数传递给应用的控制器组件。
  • 所有的请求参数类型只能是字符串数据类型,但Java是强类型语言,所以Spring MVC框架必须将这些字符串请求参数转换成相应的数据类型。
  • Spring MVC框架不仅提供了强大的类型转换和格式化机制,而且开发者还可以方便地开发出自己的类型转换器和格式化转换器,完成字符串和各种数据类型之间的转换。

Spring MVC框架必须将请求参数转换成值对象类里各属性对应的数据类型——这就是类型转换的意义。

  • Spring MVC框架的Converter是一个可以将一种数据类型转换成另一种数据类型的接口。
    • S表示源类型,
    • T表示目标类型。
  • 在实际应用中,使用框架内置的类型转换器基本就够了,但有时需要编写具有特定功能的类型转换器。
  • 在Spring MVC框架中,对于常用的数据类型,开发者无需创建自己的类型转换器,因为Spring MVC框架有许多内置的类型转换器用于完成常用的类型转换。 | 名称 | 作用 | | —- | —- | | StringToBooleanConverter | String到boolean类型转换 | | ObjectToStringConverter | Object到String转换,调用toString方法转换 | | StringToNumberConverterFactory | String到数字转换(例如Integer、Long等) | | NumberToNumberConverterFactory | 数字子类型(基本类型)到数字类型(包装类型)转换 | | StringToCharacterConverter | String到Character转换,取字符串中的第一个字符 | | NumberToCharacterConverter | 数字子类型到Character转换 | | CharacterToNumberFactory | Character到数字子类型转换 | | StringToEnumConverterFactory | String到枚举类型转换,通过Enum.valueOf将字符串转换为需要的枚举类型 | | EnumToStringConverter | 枚举类型到String转换,返回枚举对象的name值 | | StringToLocaleConverter | String到java.util.Locale转换 | | PropertiesToStringConverter | java.util.Properties到String转换,默认通过ISO-8859-1解码 | | StringToPropertiesConverter | String到java.util.Properties转换,默认使用ISO-8859-1编码 | | ArrayToCollectionConverter | 任意数组到任意集合(List、Set)转换 | | CollectionToArrayConverter | 任意集合到任意数组转换 | | ArrayToArrayConverter | 任意数组到任意数组转换 | | CollectionToCollectionConverter | 集合之间的类型转换 | | MapToMapConverter | Map之间的类型转换 | | ArrayToStringConverter | 任意数组到String转换 | | StringToArrayConverter | 字符串到数组的转换,默认通过“,”分割,且去除字符串两边的空格(trim) | | ArrayToObjectConverter | 任意数组到Object的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回数组的第一个元素并进行类型转换 | | ObjectToArrayConverter | Object到单元素数组转换 | | CollectionToStringConverter | 任意集合(List、Set)到String转换 | | StringToCollectionConverter | String 到集合(List、Set)转换,默认通过“,”分割,且去除字符串两边的空格(trim) | | CollectionToObjectConverter | 任意集合到任意Object的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换 | | ObjectToCollectionConverter | Object到单元素集合的类型转换 |

  • 类型转换是在视图与控制器传递数据时发生的。

  • Spring MVC框架对于基本类型已经做好了基本类型转换。

注意:内置类型转换器使用时,请求参数输入值与接收参数类型要兼容,否则报400错误。


当Spring MVC框架内置的类型转换器不能满足需求时,开发者可以开发自己的类型转换器。

  • 创建实体类
  • 创建控制器类
  • 创建自定义类型转换器
  • 注册类型转换器
  • 创建相关视图

  • 自定义类型转换器类
    • 需要实现Converter接口,重写convert(S)接口方法。
  • convert(S)方法功能是将源数据类型S转换成目标数据类型T。

    Formatter

  • Spring MVC框架的Formatter与Converter一样,也是一个可以将一种数据类型转换成另一种数据类型的接口。但不同的是,Formatter的源数据类型必须是String类型,而Converter的源数据类型是任意数据类型。

  • 在Web应用中,由HTTP发送的请求数据到控制器中都是以String类型获取。因此,在Web应用中选择Formatter比选择Converter更加合理。
  • Spring MVC提供的几个内置的格式化转换器:
    • NumberFormatter:实现Number与String之间的解析与格式化。
    • CurrencyFormatter:实现Number与String之间的解析与格式化(带货币符号)。
    • PercentFormatter:实现Number与String之间的解析与格式化(带百分数符号)。
    • DateFormatter:实现Date与String之间的解析与格式化。

image.png