博客
关于我
SpringMVC(7)——类型转换器Converter
阅读量:267 次
发布时间:2019-03-01

本文共 3506 字,大约阅读时间需要 11 分钟。

Spring MVC类型转换器详解

Spring MVC框架提供了强大的数据类型转换功能,开发者可以通过内置转换器或自定义转换器实现数据类型间的互相转换。本文将详细介绍Spring MVC类型转换器的使用方法。


1. Spring MVC类型转换器概述

Spring MVC框架提供了许多常用数据类型的转换器,这些转换器在视图与控制器之间传递数据时自动使用。默认情况下,Spring会自动检测并使用这些转换器。


2. 内置类型转换器

Spring MVC内置了许多常用类型转换器,以下是几种常见的转换器及其使用场景:

2.1 基本类型转换器

  • StringToBooleanConverter:将String类型转换为boolean类型。
  • ObjectToStringConverter:调用对象的toString方法,将其转换为String类型。
  • StringToNumberConverterFactory:将String转换为数字类型(如Integer、Long等)。
  • NumberToNumberConverterFactory:将数字子类型(如Integer、Long)转换为包装类型(如Number)。
  • 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编码。

2.2 集合、数组相关转换器

  • ArrayToCollectionConverter:将任意数组转换为集合(List、Set)。
  • CollectionToArrayConverter:将集合转换为数组。
  • ArrayToArrayConverter:将任意数组转换为任意数组。
  • CollectionToCollectionConverter:实现集合之间的类型转换。
  • MapToMapConverter:实现Map之间的类型转换。
  • ArrayToStringConverter:将任意数组转换为String。
  • StringToArrayConverter:将String转换为数组,默认使用逗号分隔并去除空格。
  • ArrayToObjectConverter:将数组转换为Object,若目标类型与源类型兼容则直接返回源对象。
  • ObjectToArrayConverter:将Object转换为单元素数组。
  • CollectionToStringConverter:将集合转换为String,默认使用逗号分隔并去除空格。
  • StringToCollectionConverter:将String转换为集合,默认使用逗号分隔并去除空格。
  • CollectionToObjectConverter:将集合转换为Object,若目标类型与源类型兼容则直接返回源对象。
  • ObjectToCollectionConverter:将Object转换为单元素集合。

3. 自定义类型转换器

在某些场景下,内置转换器可能无法满足需求,此时可以编写自定义类型转换器。自定义转换器需要实现Converter<S,T>接口,并覆盖convert(S)方法。

3.1 自定义转换器的实现

以Student类为例,创建一个自定义类型转换器StudentConverter,实现Converter<String, Student>接口:

package springmvcdemo.converter;import org.springframework.core.convert.converter.Converter;import springmvcdemo.pojo.Student;public class StudentConverter implements Converter
{ @Override public Student convert(String s) { Student student = new Student(); String[] stringValues = s.split(","); if (stringValues != null && stringValues.length == 5) { student.setId(Integer.parseInt(stringValues[0])); student.setName(stringValues[1]); student.setPassword(stringValues[2]); student.setSex(stringValues[3]); student.setAge(Integer.parseInt(stringValues[4])); return student; } else { throw new IllegalArgumentException(String.format("类型转换失败,格式应为'1,张三,abc,男,18',但实际格式是[%s]", s)); } }}

4. 注册类型转换器

在Spring配置文件中注册自定义类型转换器:


5. 创建JSP视图文件

创建showStudent.jsp文件,用于显示转换后的Student对象:

<%@ page import="springmvcdemo.pojo.Student" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>显示学生信息<%Student student = (Student)request.getAttribute("student");%>学生ID:<%= student.getId() %>
学生姓名:<%= student.getName() %>
学生密码:<%= student.getPassword() %>
学生性别:<%= student.getSex() %>
学生年龄:<%= student.getAge() %>

创建input.jsp文件,用于用户输入数据:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>输入
请输入学生信息(格式为:1,张三,abc,男,19):

6. 运行效果

访问应用程序的输入页面,输入符合格式的数据并提交,系统会将输入的字符串转换为Student对象并显示在页面上。如输入格式不正确,系统会抛出错误提示。


以上内容完整涵盖了Spring MVC类型转换器的使用方法,包括内置转换器的使用、自定义转换器的编写以及在Spring配置文件中的注册。通过以上步骤,您可以轻松实现数据类型间的转换,提升应用程序的灵活性和可扩展性。

转载地址:http://vlzx.baihongyu.com/

你可能感兴趣的文章
Objective-C实现DNF排序算法(附完整源码)
查看>>
Objective-C实现double factorial iterative双阶乘迭代算法(附完整源码)
查看>>
Objective-C实现double factorial recursive双阶乘递归算法(附完整源码)
查看>>
Objective-C实现double hash双哈希算法(附完整源码)
查看>>
Objective-C实现double linear search recursion双线性搜索递归算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表算法(附完整源码)
查看>>
Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
查看>>
Objective-C实现Edmonds-Karp算法(附完整源码)
查看>>
Objective-C实现EEMD算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现entropy熵算法(附完整源码)
查看>>
Objective-C实现euclidean distance欧式距离算法(附完整源码)
查看>>
Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
查看>>
Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
查看>>
Objective-C实现euler method欧拉法算法(附完整源码)
查看>>
Objective-C实现eulerianPath欧拉路径算法(附完整源码)
查看>>
Objective-C实现EulersTotient欧拉方程算法(附完整源码)
查看>>
Objective-C实现eval函数功能(附完整源码)
查看>>