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

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

目录


概述

SpringMVC框架的Converter<S,T>是一个可以将一种数据类型转换成另一种数据类型的接口,这里S表示源类型,T表示目标类型。开发者在实际应用中使用框架内置的类型转换器基本上就够了,但有时需要编写具有特定功能的类型转换器。

内置的类型转换器

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到单元素集合的类型转换。

自定义类型转换器

程序员可以自定义类型转换器,如把一个字符串数据转换成一个实体类对象。

实例:

按照如下图创建springmvc项目并且创建文件及文件夹:

创建实体类

Student.java

package springmvcdemo.pojo;public class Student {    private int id;    private String name;    private String password;    private String sex;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

创建控制器类

ConverterController.java

package springmvcdemo.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import springmvcdemo.pojo.Student;@Controller@RequestMapping("/student")public class ConverterController {    /**     * 使用@RequestParam("student")接收请求参数,然后调用自定义类型转换器StudentConverter将字符串值转换为Student的对象student     */    @RequestMapping("/converter")    public String converter(@RequestParam("student")Student student, Model model){        model.addAttribute("student",student);        return "showStudent";    }}

创建自定义类型转换器类

自定义类型转换器类需要实现Converter<S,T>接口,重写convert(S)接口方法。

convert(S)方法的功能是将源数据类型S转换成目标数据类型T。

StudentConverter.java

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 student=new Student(); // 以“,”分隔 String[] stringValues = s.split(","); if(stringValues!=null&&stringValues.length==5){ // 为Student实例赋值 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)); } }}

注册类型转换器

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

springmvc-servlet.xml

创建JSP视图文件

showStudent.jsp

<%@ 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):

web.xml

dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/config/springmvc-config/springmvc-servlet.xml
1
dispatcher
/

运行效果

输入如下地址:

输入信息并提交

(中文乱码)

如果输入不符合格式(如把英文逗号变成中文逗号)

将报错

 

如果对完整源码有兴趣。

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【CSDN201911152015】可获取本节源码。

 

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

你可能感兴趣的文章
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>
mysql-递归查询(二)
查看>>
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>